1. 程式人生 > 實用技巧 >k8s deployment部署單個mysql容器例項 + service

k8s deployment部署單個mysql容器例項 + service

k8s deployment yaml,源於從網上找到的一個版本

apiVersion: apps/v1                             # apiserver的版本
kind: Deployment                                # 副本控制器deployment,管理pod和RS
metadata:
  name: mysql                                   # deployment的名稱,全域性唯一
spec:
  replicas: 1                                   # Pod副本期待數量
  selector:
    matchLabels:                                # 定義RS的標籤
      app: mysql                                # 符合目標的Pod擁有此標籤
  strategy:                                     # 定義升級的策略
    type: RollingUpdate                         # 滾動升級,逐步替換的策略
  template:                                     # 根據此模板建立Pod的副本(例項)
    metadata:
      labels:
        app: mysql                              # Pod副本的標籤,對應RS的Selector
    spec:
      nodeName: ysp1                            # 指定pod執行在的node
      containers:                               # Pod裡容器的定義部分
        - name: mysql                           # 容器的名稱
          image: mysql:5.7                      # 容器對應的docker映象
          volumeMounts:                         # 容器內掛載點的定義部分
            - name: time-zone                   # 容器內掛載點名稱
              mountPath: /etc/localtime         # 容器內掛載點路徑,可以是檔案或目錄
            - name: mysql-data
              mountPath: /var/lib/mysql         # 容器內mysql的資料目錄
            - name: mysql-logs
              mountPath: /var/log/mysql         # 容器內mysql的日誌目錄
          ports:
            - containerPort: 3306               # 容器暴露的埠號
          env:                                  # 寫入到容器內的環境容量
            - name: MYSQL_ROOT_PASSWORD         # 定義了一個mysql的root密碼的變數
              value: "456789"
      volumes:                                  # 本地需要掛載到容器裡的資料卷定義部分
        - name: time-zone                       # 資料卷名稱,需要與容器內掛載點名稱一致
          hostPath:
            path: /etc/localtime                # 掛載到容器裡的路徑,將localtime檔案掛載到容器裡,可讓容器使用本地的時區
        - name: mysql-data
          hostPath:
            path: /data/mysql/data              # 本地存放mysql資料的目錄
        - name: mysql-logs
          hostPath:
            path: /data/mysql/logs              # 本地存入mysql日誌的目錄

如果pod正常running,沒有mysql 也是可以進入的,不過得使用命令 kubectl get pod -o wide, 然後你看到的pod ip + 上面定義的容器埠號3306。

然後可以對接一個service,讓外部訪問。

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  type: NodePort
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 30006
  selector:
    app: mysql

可以通過 kubectl get svc,檢視你的service ip, 便可以通過service ip + port進行訪問,但如果你用的nat虛擬機器部署的,你的宿主及無法訪問service ip, 上午中我也加了一個nodeport,暴露30007埠。

那麼讓你的宿主機訪問虛擬機器ip + nodeport 也是可以訪問的了。