(六)k8s v1.12.2 利用initContainer为nginx动态部署前端代码

sidecar-example-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      initContainers:
      - image: registry-vpc.cn-qingdao.aliyuncs.com/houcaoyu/sidecar-dist-example:v1.0
        name: src
        command: ["cp","-r","/usr/local/src/.","/app"]
        volumeMounts:
        - mountPath: "/app"
          name: nginx-vol
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: nginx-vol
      volumes:
      - name: nginx-vol
        emptyDir: {}

与之前的yaml文件的区别仅在于initContainers这一段。
其中都了一个sidecar-dist-example:v1.0镜像,这个镜像是我自己做的(我把他放到了阿里云的镜像仓库上,这个地址是阿里云内网的,你在用的时候需要换成自己的仓库地址),其实很简单,只是在它内部的/usr/local/src目录下放了一个index.html文件。
initContainers这一段的作用就是把这个镜像的/usr/local/src目录里的所有内容拷贝到/app目录下,然后就退出了。
而/app目录是通过volumes定义的一个空目录,这个目录在后边nginx镜像上被挂载到了/usr/share/nginx/html,这样就把代码动态加入到了nginx中。
利用initContainer发布代码的好处是,不用每次代码变更时都对nginx重新build,在镜像间实现了解耦。

你可能感兴趣的:((六)k8s v1.12.2 利用initContainer为nginx动态部署前端代码)