k8s部署实例

k8s部署实例

  • k8s部署实例
    • 1. 持久化nginx或php等静态资源的pod
      • 1.1 需求
      • 1.2 方案
      • 1.3 解决步骤

k8s部署实例

1. 持久化nginx或php等静态资源的pod

1.1 需求

不想每次都把代码打包到nginx镜像,想要持久化代码,但是持久化代码需要挂载网络磁盘nfs或oss等,每次开发完成,都需要将代码放到网络磁盘中,不想每次都手动更新网络磁盘中的代码。

1.2 方案

(一个pod内同时有nginx+php容器也可以这么做,多个容器同理)
设置一个初始化容器(初始化容器用过之后就会消失),初始化容器挂载nfs到指定目录,然后利用git拉取代码到指定目录,这样nfs中就有代码了
因为pod启动时会先启动初始化容器(详情见:https://blog.csdn.net/martinlinux/article/details/125299226 >> 2.1 pod过程),所以在将nginx容器挂载上nfs,这样nginx的html目录中就有代码了

1.3 解决步骤

  1. 创建git拉取时使用的账号密码 secret资源

我这里的账号密码是root 12345678,因为使用Opaque类型的secret,所以需要先把账号密码加密
echo ‘root’ | base64
echo ‘12345678’ | base64

vim git-base.yaml

apiVersion: v1
kind: Secret
metadata:
        name: git-secret
        namespace: dev
type: Opaque
data:
        username: cm9vdA==
        password: MTIzNDU2Nzg=
  1. 部署pod
apiVersion: apps/v1
kind: Deployment
metadata:
   name: nginx-web
   labels:
      app: nginx-web
      env: dev
   namespace: dev
spec:
   replicas: 1
   selector:
      matchLabels:
         app: nginx-web
   template:
      metadata:
         labels:
            app: nginx-web
      spec:
         initContainers:
         - name: git-base
           image: git-base:2.24.4
           env:		#因为初始化容器是一次性的,所以这里直接把账号密码映射到环境变量
           - name: GIT_USER
             valueFrom:
                secretKeyRef:
                   name: git-secret
                   key: username
           - name: GIT_PASSWORD
             valueFrom:
                secretKeyRef:
                   name: git-secret
                   key: password
           workingDir: /usr/local/src
           command: ['/bin/sh','-c']
           args: ['git clone http://$GIT_USER:[email protected]/prd_web/web01.git']
           volumeMounts:
           - mountPath: /usr/local/src
             name: htmldata
         containers:
         - name: nginx-web
           image: nginx-base:1.16.1
           volumeMounts:
           - mountPath: /usr/local/nginx/html
             name: htmldata
         volumes:
         - name: htmldata
           nfs:
              server: 192.168.8.30
              path: /data/redis
              readOnly: false
---
apiVersion: v1
kind: Service
metadata:
   name: nginx-web-svc
   namespace: dev
spec:
   type: NodePort
   selector:
      app: nginx-web
   ports:
   - name: nginx-http
     protocol: TCP
     port: 80
     targetPort: 80

你可能感兴趣的:(k8s,kubernetes)