kubernetes 部署 MySQL以及簡單使用

kubernetes 部署 MySQL  - k8s 部署 MySQL

k8s環境搭建

查考安裝地址《CentOS 7搭建---K8S集羣》

定義 MYSQL RC 配置

我們創建一個 mysql-rc.yaml 的文件,內容如下:

apiVersion: v1
kind: ReplicationController  # 副本控制器 RC
metadata:
  name: mysql # RC名稱,全局唯一
spec:
  replicas: 1 # Pod副本期待數量
  selector:
    app: mysql # 符合目標 Pod擁有此標籤
  template:  # 根據此模板創建 Pod 的副本(實例)
    metadata:
      labels:
        app: mysql # Pod 副本擁有的標籤,對應 RC 的Selector
    spec:
      containers:  # Pod 內容的定義部分
       - name: mysql #容器的名稱
         image: mysql #容器對應的 Docker Image
         ports:
          - containerPort: 3306 # 容器暴露的端口號
            hostPort: 3306 # 宿主機端口,外部可通過宿主機端口訪問mysql
         env:  # 注入到容器的環境變量
          - name: MYSQL_ROOT_PASSWORD
            value: "123456"

修改環境配置

1.編輯vi /etc/kubernetes/kubelet(修改鏡像下載url)

修改前:KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

修改後:KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/tianyebj/pod-infrastructure:latest"

 

2.編輯/etc/kubernetes/apiserver

去除 KUBE_ADMISSION_CONTROL 中的 SecurityContextDeny,ServiceAccount ,並重啓kube-apiserver.service服務

# vim /etc/kubernetes/apiserver 
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
# systemctl restart kube-apiserver.service

3.在k8s-client執行

yum install *rhsm*

重啓服務

systemctl restart kubelet docker kube-apiserver kube-controller-manager kube-scheduler

啓動mysql服務器並且查看狀態

[root@k8s-server ~]# kubectl create -f mysql-rc.yaml
replicationcontroller "mysql" created
[root@k8s-server ~]#  kubectl describe pods mysql
Name:           mysql-kwqb9
Namespace:      default
Node:           127.0.0.1/127.0.0.1
Start Time:     Sun, 12 Apr 2020 00:09:07 -0400
Labels:         app=mysql
Status:         Running
IP:             10.8.71.2
Controllers:    ReplicationController/mysql
Containers:
  mysql:
    Container ID:       docker://5cb3d769de0db84bea319833e3008c38ecd1f84b16687c293334148856d42d61
    Image:              mysql
    Image ID:           docker-pullable://docker.io/mysql@sha256:b69d0b62d02ee1eba8c7aeb32eba1bb678b6cfa4ccfb211a5d7931c7755dc4a8
    Port:               3306/TCP
    State:              Running
      Started:          Sun, 12 Apr 2020 00:09:55 -0400
    Ready:              True
    Restart Count:      0
    Volume Mounts:      <none>
    Environment Variables:
      MYSQL_ROOT_PASSWORD:      123456
Conditions:
  Type          Status
  Initialized   True 
  Ready         True 
  PodScheduled  True 
No volumes.
QoS Class:      BestEffort
Tolerations:    <none>
Events:
  FirstSeen     LastSeen        Count   From                    SubObjectPath           Type            Reason                  Message
  ---------     --------        -----   ----                    -------------           --------        ------                  -------
  9m            9m              1       {default-scheduler }                            Normal          Scheduled               Successfully assigned mysql-kwqb9 to 127.0.0.1
  8m            8m              1       {kubelet 127.0.0.1}     spec.containers{mysql}  Normal          Pulling                 pulling image "mysql"
  8m            8m              2       {kubelet 127.0.0.1}                             Warning         MissingClusterDNS       kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
  8m            8m              1       {kubelet 127.0.0.1}     spec.containers{mysql}  Normal          Pulled                  Successfully pulled image "mysql"
  8m            8m              1       {kubelet 127.0.0.1}     spec.containers{mysql}  Normal          Created                 Created container with docker id 5cb3d769de0d; Security:[seccomp=unconfined]
  8m            8m              1       {kubelet 127.0.0.1}     spec.containers{mysql}  Normal          Started                 Started container with docker id 5cb3d769de0d

mysql使用

[root@k8s-server ~]# docker ps
CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS              PORTS               NAMES
5cb3d769de0d        mysql                                          "docker-entrypoint..."   15 minutes ago      Up 14 minutes                           k8s_mysql.f6601b53_mysql-kwqb9_default_5ad8784f-7c73-11ea-ab08-000c297676f8_b07ca837
5954d7cf8d2d        docker.io/tianyebj/pod-infrastructure:latest   "/pod"                   15 minutes ago      Up 15 minutes                           k8s_POD.232c066b_mysql-kwqb9_default_5ad8784f-7c73-11ea-ab08-000c297676f8_9332af81

通過container id 進入到mysql容器中

[root@k8s-server ~]# docker exec -it 5cb3d769de0d /bin/bash
root@mysql-kwqb9:/# 

登錄到mysql數據庫

mysql  -uroot -p123456

root@mysql-kwqb9:/# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

如何對外提供服務,需要將容器端口進行映射

 

遠程連接mysql

1、然後在mysql中先更改加密方式,指令如下:

mysql>ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;

2、然後再更改密碼,由於加密規則更改,所以需要重新設置密碼;

mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

 3、給與root用戶全部權限;

mysql> grant all privileges on *.* to root;

 4、最後在刷新一下數據庫;

mysql>FLUSH PRIVILEGES;

 5、使用navicat連接數據庫中;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章