一、kubernetes集群
kubernetes集群安装参照https://blog.csdn.net/luhost/article/details/99191469
二、部署mysql8.0
新建mysql-rc.yaml和mysql-svc.yaml,分别如下:
mysql-rc.yaml:
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-rc
labels:
name: mysql-rc
spec:
replicas: 1
selector:
name: mysql-pod
template:
metadata:
labels:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysql3643212"
mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 31306
selector:
name: mysql-pod
在mysql-rc.yaml中,image参数可以指定mysql的版本,如8.0.11、5.7.22等。这里省略了,表示用latest。另外,可以指定镜像库,这里使用阿里云镜像库,在安装docker时进行了配置。env参数指定了mysql的root密码。
在mysql-svc.yaml中,targetPort表示mysql pod中mysql窗口的目标端口,默认为3306,type类型为NodePort,表示将映射到本地端口,本地端口为nodePort: 31306。
执行以下命令:
kubectl create -f mysql-rc.yaml
kubectl create -f mysql-svc.yaml
启动后可以查看mysql部署在了哪个node上,执行以下命令可以查看:
kubectl get pod -o wide
[root@kuber-master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-rc-7v88m 1/1 Running 0 3h39m 10.244.1.5 kuber-node1 <none> <none>
登录到kuber-node1中,执行docker ps查看mysql容器。如下所示:
[root@kuber-node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
688e467b9a88 mysql "docker-entrypoint.s…" 2 hours ago Up 2 hours k8s_mysql_mysql-rc-7v88m_default_cc562273-17a2-423e-907f-431a258d216a_0
8408d144b508 f9aed6605b81 "/dashboard --insecu…" 2 hours ago Up 2 hours k8s_kubernetes-dashboard_kubernetes-dashboard-7d75c474bb-9xt67_kube-system_a3f1e2f4-6e5c-48e7-bae8-9a7ce27704ad_1
7e5a65322958 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_kubernetes-dashboard-7d75c474bb-9xt67_kube-system_a3f1e2f4-6e5c-48e7-bae8-9a7ce27704ad_5
b0a3b4d7d4ff k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_mysql-rc-7v88m_default_cc562273-17a2-423e-907f-431a258d216a_4
进入mysql容器,执行以下命令进入容器,这里container_id为688e467b9a88
docker exec -it container_id /bin/bash
在容器内登录mysql。执行以下命令,-h为ip,容器内ip为127.0.0.1,-r为用户名,-p为密码,在mysql-rc中设置的密码。
mysql -h127.0.0.1 -uroot -pmysql3643212
对mysql进行如下设置。
alter user 'root'@'%' identified with mysql_native_password by'root';
alter user 'root'@'%' identified by 'mysql';
退出mysql和容器,执行quit;退出mysql,按ctrl+p后,再按ctrl+q从容器中返回node主机。
设置好mysql后,可以远程连接node中的mysql,node的ip为192.168.140.129,映射的端口为31306,可以用navicat工具连接到这个myql。
三、部署Nginx
创建nginx-rc.yaml文件
vi nginx-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-controller
spec:
replicas: 2
selector:
name: nginx
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
创建nginx-service.yaml文件
vi nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service-nodeport
spec:
ports:
- port: 8000
targetPort: 80
protocol: TCP
type: NodePort
selector:
name: nginx
创建pod和service
kubectl create -f nginx-rc.yaml
kubectl create -f nginx-service.yaml
查看pod
[root@kuber-master ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
mysql-rc-7v88m 1/1 Running 0 3h52m
nginx-controller-4nmgr 1/1 Running 0 128m
nginx-controller-gl52w 1/1 Running 0 128m
查看service
[root@kuber-master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d
mysql-svc NodePort 10.99.220.201 <none> 3306:31306/TCP 3h50m
nginx-service-nodeport NodePort 10.102.119.54 <none> 8000:31896/TCP 128m
查看service详细信息
[root@kuber-master ~]# kubectl describe svc nginx-service-nodeport
Name: nginx-service-nodeport
Namespace: default
Labels: <none>
Annotations: <none>
Selector: name=nginx
Type: NodePort
IP: 10.102.119.54
Port: <unset> 8000/TCP
TargetPort: 80/TCP
NodePort: <unset> 31896/TCP
Endpoints: 10.244.1.11:80,10.244.1.12:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
从上面的描述可以看出在node节点访问31896即可访问nginx