k8s mysql+nginx部署 - Go语言中文社区

k8s mysql+nginx部署


一、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
nginx

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/luhost/article/details/99692270
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢