分爲兩步:
- 製作鏡像
- k8s 集羣中發佈 Deployment
以java後端程序爲例
- 首先將程序打包
- 編寫Dockerfile
- 編寫app yaml
- 編寫外部訪問service
可以像我這樣將jar包和Dockerfile放在同一個目錄下
編寫Dockerfile
#基礎鏡像,如果本地倉庫沒有,會從遠程倉庫拉取
FROM openjdk:8-jdk-alpine
#會把app.jar放在docker image的根目錄下
ADD td-backup-server-0.0.1-SNAPSHOT.jar app.jar
#聲明可以用這個端口
EXPOSE 8080
#指定容器啓動時要執行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
執行命令生成鏡像
docker build -t server .
編寫tdbackup.yaml
apiVersion: v1
kind: Service
metadata:
name: tdbackupserver
namespace: default
labels:
app: tdbackupserver
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30090 #service對外開放端口
selector:
app: tdbackupserver
---
apiVersion: apps/v1
kind: Deployment #對象類型
metadata:
name: tdbackupserver #名稱
labels:
app: tdbackupserver #標註
spec:
replicas: 2 #運行容器的副本數,修改這裏可以快速修改分佈式節點數量
selector:
matchLabels:
app: tdbackupserver
template:
metadata:
labels:
app: tdbackupserver
spec:
containers: #docker容器的配置
- name: tdbackupserver
image: tdbackup:latest # pull鏡像的地址 ip:prot/dir/images:tag
imagePullPolicy: IfNotPresent #pull鏡像時機,
ports:
- containerPort: 8080 #容器對外開放端口
暴露service
kubectl create -f tdbackup.yaml
編寫mysql-pro.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-production
spec:
ports:
- port: 3306
---
kind: Endpoints
apiVersion: v1
metadata:
name: mysql-production
namespace: default
subsets:
- addresses:
- ip: 123.123.123.33
ports:
- port: 3306
修改數據庫連接字符串
url: jdbc:mysql:// mysql-production:3310/tdBackupServer?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&createDatabaseIfNotExist=true
使用endpoint連接外部集羣
kubectl create -f mysql-pro.yaml
任意節點ip + 30090測試 #service對外開放端口