1. jenkins配置部署,從git或者svn等拉取代碼,編制打包,在博客的jenkins那塊有具體的講解 2. 將打好的包war/java包拷貝到k8s-Master,或者在jenkins上也行,我這里測試為了方便直接在k8s上面執行 3. 在k8s-node和k8s-master上配置好私有倉庫鏡像拉取 vim /usr/lib/systemd/system/docker.service #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.105 systemctl daemon-reload && systemctl restart docker 4. 在k8s-master編寫Dockerfile,jenkins執行的腳本及yaml文件 mkdir /root/tomcat vim Dockerfile FROM tomcat #基礎鏡像 MAINTAINER Mlxg #作者 RUN mkdir /usr/local/tomcat/webapps/test #創建容器test目錄 ADD test.txt /usr/local/tomcat/webapps/test #test.txt放到test目錄
#jar/war包直接ADD到webapps下啟動tomcat即可 ADD server.xml /usr/local/tomcat/conf #替換容器server.xml EXPOSE 18080 #容器tomcat端口 ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"] #啟動tomcat jenkins腳本 #!/bin/bash docker build -t tomcat:v1.0 . #生成鏡像 docker tag tomcat:v1.0 192.168.0.105/test/tomcat:v1.0 #打tag docker login --username=admin --password='admin' 192.168.0.105 #登錄私有倉庫 docker push 192.168.0.105/test/tomcat:v1.0 #上傳鏡像
5. 配置無需手動登錄docker私有倉庫 docker login 192.168.0.105輸入用戶及密碼 登錄之后在~/.docker/config.json文件 再對上面的config.json進行base64加密,命令如下: cat ~/.docker/config.json |base64 -w 0 創建secret.yaml文件,文件內容如下: apiVersion: v1 kind: Secret metadata: name: mysecret data: .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJodWIueXh0Yy5jb206ODA4MSI6IHsKCQkJImF1dGgiOiAiWTNJM09saDFNVEl6TkRVMk1qVT0iCgkJfQoJfQp9Cg== #base64加密密碼 type: kubernetes.io/dockerconfigjson 創建secret,命令如下: kubectl create -f secret.yaml,生成secret 我試了一下無法拉取,還沒未找到問題,可能是我之前搞錯了之后,生成了一個錯誤的 手動創建一個secret,使用 secret 來指定 pull 權限 kubectl create secret docker-registry registry-harbor \ --namespace=default --docker-server=192.168.0.105 \ --docker-username=admin --docker-password='admin' kubectl get secrets 6. 編寫yaml文件及svc文件 test-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: test spec: replicas: 2 selector: app: test template: metadata: labels: app: test spec: containers: - name: test image: 192.168.0.105/test/tomcat:v1.0 #私有倉庫鏡像 ports: - containerPort: 18080 imagePullSecrets: - name: registry-harbor #創建secret定義的倉庫名稱 test-svc.yaml apiVersion: v1 kind: Service metadata: name: test spec: type: NodePort ports: - port: 18080 #容器暴露端口 nodePort: 31002 #映射node服務器提供外部訪問端口 selector: app: test
8. 執行部署web及services kubectl create -f test-rc.yaml kubectl get pods #可查看pod進度 kubectl describe pod test-s5c48 #查看pod信息及報錯 kubectl delete -f test-rc.yaml #刪除pods kubectl create -f test-svc.yaml kubectl get svc kubectl delete -f test-svc.yaml
docker ps | grep tomcat #在node上查看容器是否正常運行
9. jenkins配置 配置源碼及執行的shell
10. k8s上編寫Docfile,build,yanl文件 在jenkins上ADD zip/jar包是報錯沒有這個文件,暫未找到什么問題 此處scp到k8s-master上執行打包鏡像上傳私有倉庫 vim Dockerfile FROM docker.io/centos MAINTAINER Mlxg RUN yum install -y unzip RUN mkdir /opt/server ADD letouactivity-provider-1.0.0-SNAPSHOT-bin.zip /opt/server RUN unzip /opt/server/letouactivity-provider-1.0.0-SNAPSHOT-bin.zip -d /opt/server EXPOSE 28080 ENTRYPOINT ["/opt/server/bin/start.sh","run"] vim letou.sh #tag可通過變量獲取,為了測試方便 #!/bin/bash docker build -t letou:v1.0 . docker tag letou:v1.0 192.168.0.105/test/letou:v1.0 docker login --username=Mlxg --password='Mlxg2234' 192.168.0.105 docker push 192.168.0.105/test/letou:v1.0 vim letou-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: letou spec: replicas: 2 selector: app: letou template: metadata: labels: app: letou spec: containers: - name: letou image: 192.168.0.105/test/letou:v1.0 ports: - containerPort: 28080 imagePullSecrets: - name: registry-harbor vim letou-svc.yaml apiVersion: v1 kind: Service metadata: name: letou spec: type: NodePort ports: - port: 28080 nodePort: 30332 selector: app: letou
11. 在k8s-master執行查看是否部署成功 因為我們的代碼需要連接duboo,zk,apollo(可部署在宿主機),此時node上的容器其實訪問不了 只要能成功查看letou pod就發布成功了