其他相關(guān)文檔:《Depoloymen 回滾/暫停/啟動》
1. 概念
1.1 作用
- 創(chuàng)建Pod和ReplicaSet
- 滾動升級和回滾應(yīng)用
- 擴容和縮容
- 暫停和繼續(xù)Deployme
1.2 實際應(yīng)用
無狀態(tài)和不需要每個node上啟動一個的POD,一般都使用Deployme
1.3 比較
對象 | 是否有狀態(tài) | POD數(shù)量 |
---|---|---|
Deployment | 無 | 按副本數(shù) |
DaemonSet | 無 | (適合節(jié)點)每節(jié)點一個 |
StatefulSet | 有 | 按副本數(shù) |
相關(guān)文檔
《K8S-DaemonSet》
《k8s-StatefulSet》
2. 示例
單機mysql為例镊叁。雖然mysql是有狀態(tài)的尘颓,但是我們做單機只啟動一個副本(replicas只能選1)
2.1 deployment 的yml文件
# 定義接口版本
apiVersion: extensions/v1beta1
# 定義對象類型
kind: Deployment
# 定義元數(shù)據(jù),包括名稱和命名空間等
metadata:
name: mysql
namespace: mysql-test
# spec 下說明的是如何創(chuàng)建deployment
spec:
#副本數(shù)
replicas: 1
# template下寫明deployment 如何創(chuàng)建pod
template:
# 元數(shù)據(jù)包括該pod的標(biāo)簽(service會根據(jù)該標(biāo)簽代理pod)
metadata:
labels:
app: mysql
# 創(chuàng)建pod的模板
spec:
containers:
- name: mysql # 容器名
image: harbocto.xxx.com.cn/public/mysql:5.7 # 鏡像
imagePullPolicy: IfNotPresent # 拉取鏡像方案 (Always)
# 定義容器中變量
env:
- name: MYSQL_ROOT_PASSWORD
value: liubei@2021
- name: MYSQL_REPLICATION_USER
value: "liubei"
- name: MYSQLREPLICAITONPASSWO
value: "liubei@2021"
# 定義端口
ports:
- containerPort: 3306
volumeMounts:
# 掛載目錄
- name: mysql-data # 掛載名稱晦譬,和下邊volumes的對上
mountPath: /var/lib/mysql # 容器內(nèi)要掛載目錄
# 掛載文件
- mountPath: /etc/mysql/my.cnf # 容器內(nèi)要掛載文件
name: mysqlcnf # 掛載名疤苹,和下邊volumes的對上
subPath: my.cnf # 容器內(nèi)掛載文件名,和mountPath配合使用
# 指明上邊容器內(nèi)掛載資源對應(yīng)容器外的各資源
volumes:
- name: mysql-data # 對應(yīng)上邊volumeMounts 中的一個掛載名
# 指明外部掛載PV敛腌。
persistentVolumeClaim:
claimName: mysql # 和后邊創(chuàng)建pvc的名字要一致
- name: mysqlcnf # 對應(yīng)上邊volumeMounts 中的一個掛載名
# 指明外部掛載的是configmap
configMap:
name: mysqlcnf # 和configmap的名字要一致
2.2 需要的相關(guān)對象
前邊寫的deployment需要如下對象:
說明:這些對象并不是創(chuàng)建所有deployment所必須的卧土,只是因為我們這個示例里邊定義了。
-
configmap
相關(guān)文檔:《K8s -configmap》
它不是deployment必須的像樊,只是因為前邊掛載已經(jīng)指明了這個configmap尤莺,因此必須有。
apiVersion: v1
kind: ConfigMap
metadata:
name: mysqlcnf # deployment識別這個名字掛載
namespace: mysql-test
data:
my.cnf: |
# 這里是mysql的配置文件
# 雖然鴻漸這個懶家伙什么也沒有留下生棍,但是不影響mysql啟動
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
-
pvc
相關(guān)文檔:《k8s-掛載卷》
前邊掛載已經(jīng)指明了這個configmap颤霎,因此必須有。
我的環(huán)境使用了默認storageclass涂滴,因此我不用手動創(chuàng)建pv了友酱。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql
namespace: mysql-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
-
service
相關(guān)文檔:《K8S-service》
service會使用deployment中定義的POD的標(biāo)簽
他不是和前邊configmap一樣,由deployment來指定柔纵。
因此service即使沒有缔杉,也不會影響deployment 啟動pod。
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: mysql-test
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30200
selector:
app: mysql