跳转至

8. 将myblog镜像改为pod形式

1. 创建命名空间

kubectl create ns demo

2. 编写yaml文件

mkdir -p /k8s/pod/myblog
cd /k8s/pod/myblog
vim 1.pod-with-volume.yaml
# 定点使用hostpath挂载,nodeSelector定点
apiVersion: v1
kind: Pod
metadata:
  name: myblog
  namespace: demo
  labels:
    component: myblog
spec:
  volumes: 
  - name: mysql-data
    hostPath: 
      path: /opt/mysql/data
  nodeSelector:   # 使用节点选择器将Pod调度到指定label的节点
    component: mysql
  containers:
  - name: myblog
    image: myblog:v1
    env:
    - name: MYSQL_HOST   #  指定root用户的用户名
      value: "127.0.0.1"
    - name: MYSQL_PASSWD
      value: "123456"
    ports:
    - containerPort: 8002
  - name: mysql
    image: mysql:5.7-utf8
    ports:
    - containerPort: 3306
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "123456"
    - name: MYSQL_DATABASE
      value: "myblog"
    volumeMounts:
    - name: mysql-data
      mountPath: /var/lib/mysql

3. 给master节点打label

#pod只能部署到带 component=mysql 标签的节点
kubectl label node k8s-master component=mysql

kubectl get node k8s-master --show-labels
root@k8s-master:/k8s/dockerfile/mysql# mkdir -p /k8s/pod/myblog
root@k8s-master:/k8s/dockerfile/mysql# cd /k8s/pod/myblog
root@k8s-master:/k8s/pod/myblog# vim 1.pod-with-volume.yaml
root@k8s-master:/k8s/pod/myblog#
root@k8s-master:/k8s/pod/myblog#
root@k8s-master:/k8s/pod/myblog# kubectl label node k8s-master component=mysql
node/k8s-master labeled
root@k8s-master:/k8s/pod/myblog#
root@k8s-master:/k8s/pod/myblog# kubectl get node k8s-master --show-labels
NAME         STATUS   ROLES                  AGE    VERSION   LABELS
k8s-master   Ready    control-plane,master   3d5h   v1.21.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,component=mysql,ingress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
root@k8s-master:/k8s/pod/myblog#

4. 创建pod

kubectl apply -f 1.pod-with-volume.yaml
root@k8s-master:/k8s/pod/myblog# kubectl apply -f 1.pod-with-volume.yaml
pod/myblog created
root@k8s-master:/k8s/pod/myblog#
root@k8s-master:/k8s/pod/myblog# kubectl -n demo get pod
NAME     READY   STATUS    RESTARTS   AGE
myblog   2/2     Running   0          10s

5. master节点查看本地mysql数据

###### Pod数据持久化
#若删除了Pod,由于mysql的数据都在容器内部,会造成数据丢失,因此需要数据进行持久化。

ll /opt
ll /opt/mysql/data/
#疑问:是否需要提前创建 /opt/mysql/data 目录?
#经测试发现,会自动创建此目录!!!
root@k8s-master:/k8s/pod/myblog# ll /opt
total 32
drwxr-xr-x  7 root root 4096 Nov 22 16:08 ./
drwxr-xr-x 21 root root 4096 Nov 22 16:08 ../
-rw-r--r--  1 root root    2 Nov 19 15:53 10.txt
drwxr-xr-x  3 root root 4096 Nov 19 10:47 cni/
drwx--x--x  4 root root 4096 Nov 19 10:45 containerd/
drwxr-xr-x  3 root root 4096 Nov 20 21:34 dockerfile/
-rw-------  1 root root    0 Nov 21 22:05 etcd-snapshot.db.part
drwxr-xr-x  2 root root 4096 Nov 20 21:58 myregistry/
drwxr-xr-x  3 root root 4096 Nov 22 16:08 mysql/
root@k8s-master:/k8s/pod/myblog# ll /opt/mysql/data/
total 188488
drwxr-xr-x 6 systemd-coredump root                 4096 Nov 22 16:08 ./
drwxr-xr-x 3 root             root                 4096 Nov 22 16:08 ../
-rw-r----- 1 systemd-coredump systemd-coredump       56 Nov 22 16:08 auto.cnf
-rw------- 1 systemd-coredump systemd-coredump     1680 Nov 22 16:08 ca-key.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump     1112 Nov 22 16:08 ca.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump     1112 Nov 22 16:08 client-cert.pem
-rw------- 1 systemd-coredump systemd-coredump     1680 Nov 22 16:08 client-key.pem
-rw-r----- 1 systemd-coredump systemd-coredump     1352 Nov 22 16:08 ib_buffer_pool
-rw-r----- 1 systemd-coredump systemd-coredump 79691776 Nov 22 16:08 ibdata1
-rw-r----- 1 systemd-coredump systemd-coredump 50331648 Nov 22 16:08 ib_logfile0
-rw-r----- 1 systemd-coredump systemd-coredump 50331648 Nov 22 16:08 ib_logfile1
-rw-r----- 1 systemd-coredump systemd-coredump 12582912 Nov 22 16:08 ibtmp1
drwxr-x--- 2 systemd-coredump systemd-coredump     4096 Nov 22 16:08 myblog/
drwxr-x--- 2 systemd-coredump systemd-coredump     4096 Nov 22 16:08 mysql/
drwxr-x--- 2 systemd-coredump systemd-coredump     4096 Nov 22 16:08 performance_schema/
-rw------- 1 systemd-coredump systemd-coredump     1676 Nov 22 16:08 private_key.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump      452 Nov 22 16:08 public_key.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump     1112 Nov 22 16:08 server-cert.pem
-rw------- 1 systemd-coredump systemd-coredump     1680 Nov 22 16:08 server-key.pem
drwxr-x--- 2 systemd-coredump systemd-coredump    12288 Nov 22 16:08 sys/
root@k8s-master:/k8s/pod/myblog#

6. 数据迁移

## 执行migrate,创建数据库表,然后删掉pod,再次创建后验证数据是否存在
kubectl -n demo exec -ti myblog -- python3 manage.py migrate

#以后,就算pod删除了,再次按以上方法创建pod后,数据依旧存在!

7. 查看pod的IP

## 查看pod ip并访问服务
kubectl -n demo get po -o wide
root@k8s-master:/k8s/pod/myblog# kubectl -n demo get po -o wide
NAME     READY   STATUS    RESTARTS   AGE    IP            NODE         NOMINATED NODE   READINESS GATES
myblog   2/2     Running   0          119s   10.244.0.35   k8s-master   <none>           <none>

8.访问服务

## 访问服务,正常
curl 10.244.0.35:8002/blog/index/ 
root@k8s-master:/k8s/pod/myblog# curl 10.244.0.35: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>

9. 创建superuser用户

kubectl -n demo exec -ti myblog -- python3 manage.py createsuperuser
root@k8s-master:/k8s/pod/myblog# kubectl -n demo exec -ti myblog -- python3 manage.py createsuperuser
Defaulted container "myblog" out of: myblog, mysql
用户名 (leave blank to use 'root'): admin
电子邮件地址: chupeng130@163.com
Password:
Password (again):
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
这个密码全部是数字的。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

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