參考:https://blog.csdn.net/sealir/article/details/81177747?utm_source=blogxgwz1
集群內安裝mysql並添加相應存儲(PVC)
新建mysql-pvc.yaml、mysql-deploy.yaml和mysql-svc.yaml,分別如下:
先找出當前k8s集群下的storageClass的name,用來創建PVC!!
kubectl get storageclasses --all-namespaces
mysql-pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc namespace: kube-system labels: app: mysql-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 2Gi storageClassName: default
storageClassName: default 中的default即為查找出來的storageClass
mysql-deploy.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deploy namespace: kube-system spec: replicas: 1 selector: matchLabels: name: mysql-pod template: metadata: labels: name: mysql-pod spec: containers: - name: mysql image: mysql:8.0.12 imagePullPolicy: IfNotPresent env: - name: MYSQL_ROOT_PASSWORD value: noc-mysql ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: "/var/lib/mysql" volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc
mysql-svc.yaml
apiVersion: v1 kind: Service metadata: name: mysql-svc namespace: kube-system labels: name: mysql-svc spec: type: NodePort ports: - port: 3306 protocol: TCP targetPort: 3306 name: http nodePort: 32306 selector: name: mysql-pod
在mysql-deploy.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: 32306。
接下來啟動PVC、Deployment和Service,執行以下命令:
kubectl create -f mysql-pvc.yaml
kubectl create -f mysql-deploy.yaml
kubectl create -f mysql-svc.yaml
啟動后可以查看mysql部署在了哪個node上,執行以下命令可以查看:
kubectl get pod -o wide
輸出如下,可以看到部署在了192.168.56.28 node中,這里在部署kubernetes時用ip表示node的名稱。
遠程連接mysql8.0時可能會報一些錯誤,如navicat連接。
【注:出現這個原因是mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之后,加密規則是caching_sha2_password, 解決問題方法有兩種,一種是升級navicat驅動,一種是把mysql用戶登錄密碼加密規則還原成mysql_native_password】
這里對mysql8.0作一些設置。
(1)、登錄到192.168.56.28node中。
(2)、執行docker ps查看mysql容器。如下所示:
(3)、進入mysql容器,執行以下命令進入容器,這里container_id為458bb493e233
docker exec -it container_id /bin/bash
(4)、在容器內登錄mysql。執行以下命令,-h為ip,容器內ip為127.0.0.1,-u為用戶名,-p為密碼,在mysql-rc中設置的密碼。
mysql -h 127.0.0.1 -uroot -pmysql
(5)、對mysql進行如下設置。
alter user 'root'@'%' identified with mysql_native_password by'root';
alter user 'root'@'%' identified by 'mysql';
(6)、退出mysql和容器,執行quit退出mysql,按ctrl+p后,再按ctrl+q從容器中返回node主機。
設置好mysql后,可以遠程連接node中的mysql,node的ip為192.168.56.28,映射的端口為32306,可以用navicat工具連接到這個myql。