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