跳转至

6. 使用deployment管理myblog应用

1. 创建目录

mkdir -p /k8s/deployment/myblog
cd /k8s/deployment/myblog

2. deploy-mysql.yaml

vim deploy-mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: demo
spec:
  replicas: 1   #指定Pod副本数
  selector:     #指定Pod的选择器
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:   #给Pod打label
        app: mysql
    spec:
      hostNetwork: true # 声明pod的网络模式为host模式,效果通docker run --net=host
      volumes: 
      - name: mysql-data
        hostPath: 
          path: /opt/mysql/data
      nodeSelector:   # 使用节点选择器将Pod调度到指定label的节点
        component: mysql
      containers:
      - name: mysql
        image: mysql:5.7-utf8
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: myblog
              key: MYSQL_USER
        - name: MYSQL_PASSWD
          valueFrom:
            secretKeyRef:
              name: myblog
              key: MYSQL_PASSWD
        - name: MYSQL_DATABASE
          value: "myblog"
        resources:
          requests:
            memory: 100Mi
            cpu: 50m
          limits:
            memory: 500Mi
            cpu: 100m
        readinessProbe:
          tcpSocket:
            port: 3306
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 3306
          initialDelaySeconds: 15
          periodSeconds: 20
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql

3. deploy-myblog.yaml

vim deploy-myblog.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myblog
  namespace: demo
spec:
  replicas: 1   #指定Pod副本数
  selector:     #指定Pod的选择器
    matchLabels:
      app: myblog
  template:
    metadata:
      labels:   #给Pod打label
        app: myblog
    spec:
      containers:
      - name: myblog
        image: myblog:v1
        imagePullPolicy: IfNotPresent
        env:
        - name: MYSQL_HOST
          valueFrom:
            configMapKeyRef:
              name: myblog
              key: MYSQL_HOST
        - name: MYSQL_PORT
          valueFrom:
            configMapKeyRef:
              name: myblog
              key: MYSQL_PORT
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: myblog
              key: MYSQL_USER
        - name: MYSQL_PASSWD
          valueFrom:
            secretKeyRef:
              name: myblog
              key: MYSQL_PASSWD
        ports:
        - containerPort: 8002
        resources:
          requests:
            memory: 100Mi
            cpu: 50m
          limits:
            memory: 500Mi
            cpu: 100m
        livenessProbe:
          httpGet:
            path: /blog/index/
            port: 8002
            scheme: HTTP
          initialDelaySeconds: 10  # 容器启动后第一次执行探测是需要等待多少秒
          periodSeconds: 15     # 执行探测的频率
          timeoutSeconds: 2     # 探测超时时间
        readinessProbe: 
          httpGet: 
            path: /blog/index/
            port: 8002
            scheme: HTTP
          initialDelaySeconds: 10 
          timeoutSeconds: 2
          periodSeconds: 15

4. 创建Deployment

1. 先删除pod资源

kubectl -n demo delete pod --all
kubectl create -f deploy-mysql.yaml
kubectl create -f deploy-myblog.yaml

5. 查看Deployment

# kubectl api-resources
$ kubectl -n demo get deploy
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
myblog   1/1     1            1           2m22s
mysql    1/1     1            1           2d11h

  * `NAME` 列出了集群中 Deployments 的名称
  * `READY`显示当前正在运行的副本数/期望的副本数
  * `UP-TO-DATE`显示已更新以实现期望状态的副本数
  * `AVAILABLE`显示应用程序可供用户使用的副本数
  * `AGE` 显示应用程序运行的时间量

6. 查看pod

kubectl -n demo get pod -owide
root@k8s-master:/k8s/deployment/myblog# kubectl -n demo get pod -owide
NAME                      READY   STATUS    RESTARTS   AGE    IP            NODE         NOMINATED NODE   READINESS GATES
myblog-577746d94f-rr99h   1/1     Running   0          116s   10.244.0.38   k8s-master   <none>           <none>
mysql-f9bfdcfcc-9wzk8     1/1     Running   0          116s   81.70.4.171   k8s-master   <none>           <none>

7. curl测试

curl 10.244.0.38:8002/blog/index/
root@k8s-master:/k8s/deployment/myblog# curl 10.244.0.38:8002/blog/index/
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h3>我的博客列表:</h3>


    </br>
    </br>
    <a href=" /blog/article/edit/0 ">写博客</a>

</body>
</html>

最后更新: 2022-02-22 04:55:01