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中,再上传到私有仓库。