k8s可以直接使用docker下載各種官方的鏡像進行部署,但是當我們需要部署自己的web應用時,就不能直接下載官方鏡像,而是應該使用dockerfile文件生成部署了自己的web應用的鏡像,然后把該鏡像上傳到私有倉庫,再在k8s中使用私有倉庫中該鏡像去生成pod。但是生成pod后,只可以在pod的所在node的機器上使用pod的id進行訪問,外部網絡不能訪問,所以為了讓外部網絡可以訪問pod里的web應用,我們還需要創建service,service的類型有好幾種,我采用的是nodeport,創建該類型的service,可以在外部網絡通過pod所在的node服務器的ip對web應用進行訪問。所以k8s部署web應用的過程大概可以分為以下幾個步驟:
開始——准備好web應用安裝包——創建docker鏡像,並在鏡像中安裝好web應用——把docker鏡像上傳到私有倉庫——k8s調用私有倉庫的鏡像生成pod——k8s創建service,建立pod跟外部網絡的鏈接通道——通過pod所在的node服務器ip訪問pod——結束
一、創建docker鏡像並安裝應用
通過Dockerfile創建鏡像,命令如下
docker build -t tomcat:v1 .
注意最后面有“.”
Dockerfile的內容如下:
# base image (使用的基礎鏡像)
FROM centos:7
# MAINTAINER (標明作者)
MAINTAINER www.cnblogs.com/fivedays/
#Yum install base programs
RUN yum install -y net-tools
RUN yum install -y vim
RUN yum install -y vi
RUN yum install -y unzip
#Install tomcat
ADD tomcat-8.5.45-jdk1.8.tar.gz /home/
#拷貝.tar.gz格式的壓縮包進docker時,會自動解壓,同時需要注意,tomcat包最好自帶自己想要的jdk
RUN chmod +x -R /home/tomcat-8.5.45-jdk1.8/
#Workdir (安裝好鏡像及容器后,命令進入容器時默認進入該路徑)
WORKDIR /home/tomcat-8.5.45-jdk1.8/bin/
#CMD (啟動容器時默認執行的命令,命令必須有效,否則無法正常啟動容器)
CMD ["/home/tomcat-8.5.45-jdk1.8/bin/catalina.sh","run"]
#Expose port (容器映射到宿主機的端口,此處只是寫入默認參數,並沒有生效,具體生效操作是在第一次啟動鏡像時輸入的具體參數)
EXPOSE 8080
tomcat-8.5.45-jdk1.8.tar.gz是tomcat+程序包,並且數據庫,環境變量等已經完全配置好,解壓即可使用。
8080是tomcat的啟動端口
二、上傳到私有倉庫
1、先給鏡像打上私有倉庫的路徑標簽標簽,我的私有倉庫的訪問路徑是192.168.8.23:5000,所以命令是:
docker tag tomcat:v1 192.168.8.23:5000/tomcat:v1
2、上傳鏡像到私有倉庫
docker push 192.168.8.23:5000/tomcat:v1
三、k8s使用私有倉庫生成pod
kubectl create -f tomcat.yaml
taglib.yaml文件內容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tomcat
spec:
replicas: 1
template:
metadata:
labels:
run: tomcat
spec:
containers:
- name: tomcat
image: 192.168.8.23:5000/tomcat:v1
ports:
- containerPort: 8080
imagePullSecrets:
- name: myregistry-key
四、創建service
kubectl create -f tomcat-svc.yaml
taglib-svc.yaml的內容如下:
apiVersion: v1
kind: Service
metadata:
name: tomcat-svc
spec:
type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: 8080
nodePort: 30001
selector:
run: tomcat
至此部署完成。
應用升級
同樣的套路,先創建鏡像並部署升級后的系統,鏡像名跟之前的名字一樣,但是版本號換成v2,命令如下:
docker build -t tomcat:v2 .
再上傳到私有倉庫
docker tag taglib:v2 192.168.8.23:5000/tomcat:v2
docker push 192.168.8.23:5000/tomcat:v2
再修改tomcat.yaml,把鏡像的版本換成v2
image: 192.168.8.23:5000/tomcat:v2
執行命令
kubectl apply -f tomcat.yaml
等待升級完畢即可。
如果安裝環境是局域網,無法連接公網,則可以在個人環境中創建好docker鏡像后,進行導出,然后導入到安裝環境的docker中,再上傳到私有倉庫。