1 使用yaml文件创建一个运行MySQL的Pod
#方法1:
[root@master01 ~]# cat mysql-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-mysql
spec:
containers:
- name: app-mysql
image: mysql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
hostPort: 3306 #hostPort,这是一种直接定义Pod网络的方式。hostPort是直接将容器的端口与所调度的节点上的端口路由
env:
- name: MYSQL_ROOT_PASSWORD
value: "centos"
[root@master01 ~]# kubectl apply -f mysql-pod.yaml
pod/app-mysql created
[root@master01 ~]# kubectl get pods -o wide | grep app-mysql
app-mysql 1/1 Running 0 31s 10.244.1.9 node01.kobe.com <none> <none>
#测试连接数据库
#使用node01节点的IP地址连接
[root@master01 ~]# kubectl exec -it app-mysql -- mysql -uroot -pcentos -h10.0.0.17 -e 'show databases'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
#使用pod中的容器IP地址连接
[root@master01 ~]# kubectl exec -it app-mysql -- mysql -uroot -pcentos -h10.244.1.9 -e 'show databases'mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
#也可以不使用地址直接访问MySQL
[root@master01 ~]# kubectl exec -it app-mysql -- mysql -uroot -pcentos -e 'show databases'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
#使用kubectl get pods 查看到app-mysql在node01上,在node01上使用docker ps 查看容器
[root@node01 ~]# docker ps | grep app-mysql
77102e31f46c dd7265748b5d "docker-entrypoint.s…" 7 minutes ago Up 7 minutes k8s_app-mysql_app-mysql_default_46916b01-37fb-41f5-b7c9-0f9a77f95100_0
ce38b6982bb9 registry.aliyuncs.com/google_containers/pause:3.2 "/pause" 7 minutes ago Up 7 minutes k8s_POD_app-mysql_default_46916b01-37fb-41f5-b7c9-0f9a77f95100_0
1 使用yaml文件创建一个运行wordpress的Pod(使用hostPort或者hostNetwork)
Pod 部署 Wordpress
环境:
master01:10.0.0.7/24 CentOS 7.8 K8s:1.19.4
noder01: 10.0.0.17/24 CentOS 7.8 K8s:1.19.4
node02: 10.0.0.27/24 CentOS 7.8 K8s:1.19.4
新建Namespace
在master01上新建名为wordpress的名称空间,目的是将wordpress部署到此名称空间内,实现资源隔离
[root@master01 ~]# kubectl create namespace wordpress
namespace/wordpress created
部署MySQL
使用YAML文件创建一个MySQL Pod资源对象
[root@master01 ~]# cat mysql-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: mysql
namespace: wordpress
spec:
containers:
- name: mysql
image: mysql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: centos
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: centos
volumeMounts:
- mountPath: /var/lib/mysql
name: db
volumes:
- name: db
hostPath:
path: /var/lib/mysql
hostNetwork: True
部署MySQL应用
[root@master01 ~]# kubectl apply -f mysql-pod.yaml
pod/mysql created
查看pod
#需要指定名称空间才能查看到mysql,否则只能看到default的pods
[root@master01 ~]# kubectl get pods -n wordpress -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql 1/1 Running 0 21s 10.0.0.27 node02.kobe.com <none> <none>
查看端口
#因为是hostNetwork共享宿主主机端口,去node02上查看3306端口是否打开
[root@node02 ~]# ss -nutlp | grep 3306
tcp LISTEN 0 70 [::]:33060 [::]:* users:(("mysqld",pid=18554,fd=31))
tcp LISTEN 0 128 [::]:3306 [::]:* users:(("mysqld",pid=1
验证MySQL
[root@master01 ~]# kubectl exec -it -n wordpress mysql -- mysql -uroot -pcentos -h 10.0.0.27 -P 3306 -e 'show databases'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
[root@master01 ~]# kubectl exec -it -n wordpress mysql -- mysql -uroot -pcentos -h 10.0.0.27 -P 3306 -e 'select user,host from mysql.user'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| wordpress | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
部署Wordpress服务
使用YAML文件创建一个wordpress Pod资源对象
注意:需要指定WORDPRESS_DB_HOST的地址为10.0.0.27:3306
[root@master01 ~]# cat wordpress-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: wordpress
namespace: wordpress
spec:
containers:
- name: wordpress
image: wordpress
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: 10.0.0.27:3306
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: centos
hostNetwork: true
部署wordpress应用
[root@master01 ~]# kubectl apply -f wordpress-pod.yaml
pod/wordpress created
查看pod
[root@master01 ~]# kubectl get pods -n wordpress -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql 1/1 Running 0 23m 10.0.0.27 node02.kobe.com <none> <none>
wordpress 1/1 Running 0 3m9s 10.0.0.27 node02.kobe.com <none> <none>
使用浏览器输入http://10.0.0.27来进行安装wordpress