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 也是可以訪問的了。