1、運(yùn)行Deployment
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 #部署包含兩個(gè)deployment nginx-deployment 容器的images為nginx:1.7.9
kubectl get deployment nginx-deployment #查看nginx-deployment的狀態(tài)
kubectl describe deployment nginx-deployment # 查看詳細(xì)的nginx-deployment狀態(tài)
kubectl get replicaset #查看replicaset
kubectl describe replicaset nginx-deployment-6fb585c4cc #查看nginx-deployment-6fb585c4cc詳細(xì)信息
Controlled By 指明此ReplicaSet是由Deploymnet nginx-deployment創(chuàng)建的。
kubectl get pod #查看pod
kubectl describe pod nginx-deployment-6fb585c4cc-m4tp8 #查看nginx-deployment-6fb585c4cc-m4tp8詳細(xì)情況
Controlled By 指明此 Pod 是由 nginx-deployment-6fb585c4cc 創(chuàng)建。Events 記錄了 Pod 的啟動(dòng)過程。
總結(jié)一下這個(gè)過程:用戶通過 kubectl 創(chuàng)建 Deployment。Deployment 創(chuàng)建 ReplicaSet。ReplicaSet 創(chuàng)建 Pod。
對(duì)象的命名方式是:子對(duì)象的名字 = 父對(duì)象名字 + 隨機(jī)字符串或數(shù)字
2、命令VS配置文件
Kubernetes 支持兩種方式創(chuàng)建資源:
1.用 kubectl 命令直接創(chuàng)建,比如:kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2在命令行中通過參數(shù)指定資源的屬性。
2.通過配置文件和 kubectl apply 創(chuàng)建,要完成前面同樣的工作,可執(zhí)行命令:kubectl apply -f nginx.ymlnginx.yml 的內(nèi)容為:
3、Deployment配置文件簡(jiǎn)介
① apiVersion 是當(dāng)前配置格式的版本。
② kind 是要?jiǎng)?chuàng)建的資源類型,這里是 Deployment。
③ metadata 是該資源的元數(shù)據(jù),name 是必需的元數(shù)據(jù)項(xiàng)。
④ spec 部分是該 Deployment 的規(guī)格說明。
⑤ replicas 指明副本數(shù)量,默認(rèn)為 1。
⑥ template 定義 Pod 的模板,這是配置文件的重要部分。
⑦ metadata 定義 Pod 的元數(shù)據(jù),至少要定義一個(gè) label。label 的 key 和 value 可以任意指定。
⑧ spec 描述 Pod 的規(guī)格,此部分定義 Pod 中每一個(gè)容器的屬性,name 和 image 是必需的。
kubectl delete deployment nginx-deployment 或者 kubectl delete -f nginx.yml #刪除nginx應(yīng)用
4、伸縮
直接修改nginx.yml 將relicas 修改成 對(duì)應(yīng)的數(shù)字,然后執(zhí)行kubectl apply -f nginx.yml出于安全考慮,默認(rèn)配置下 Kubernetes 不會(huì)將 Pod 調(diào)度到 Master 節(jié)點(diǎn)。
如果希望將 master 也當(dāng)作 Node 使用,可以執(zhí)行如下命令:kubectl taint node masterName node-role.kubernetes.io/master-如果要恢復(fù) Master Only 狀態(tài),執(zhí)行如下命令:kubectl taint node masterName node-role.kubernetes.io/master="":NoSchedule
5、用label控制pod的位置
kubectl label node node1 disktype=ssd #定義node1為disktype
kubectl get node --show-labels #查看節(jié)點(diǎn)label重新定義nginx.yml將pod部署到node1
[k8s@master ~]$ kubectl apply -f nginx.yml
kubectl label node node1 disktype- #刪除node label disktype刪除label不會(huì)影響原來部署的pod
6、DaemonSet
特點(diǎn):每個(gè) Node 上最多只能運(yùn)行一個(gè)副本。DaemonSet 的典型應(yīng)用場(chǎng)景有:在集群的每個(gè)節(jié)點(diǎn)上運(yùn)行存儲(chǔ) Daemon,比如 glusterd 或 ceph。在每個(gè)節(jié)點(diǎn)上運(yùn)行日志收集 Daemon,比如 flunentd 或 logstash。在每個(gè)節(jié)點(diǎn)上運(yùn)行監(jiān)控 Daemon,比如 Prometheus Node Exporter 或 collectd。
kubectl get daemonset --namespace=kube-system # 查看DaemonSet運(yùn)行的系統(tǒng)組件kubectl edit deployment nginx-deployment 查看資源配置和運(yùn)行狀態(tài)
運(yùn)行自己的daemonset
運(yùn)行prometheus監(jiān)控
① 直接使用 Host 的網(wǎng)絡(luò)。
② 設(shè)置容器啟動(dòng)命令。
③ 通過 Volume 將 Host 路徑 /proc、/sys 和 / 映射到容器中。我們將在后面詳細(xì)討論 Volume。
執(zhí)行:kubectl apply -f node_exporter.yml
7、Job
服務(wù)類容器
Deployment、ReplicaSet、DaemonSet
http server ,daemon
工作類容器
Job
一次性任務(wù)
① batch/v1 是當(dāng)前 Job 的 apiVersion。
② 指明當(dāng)前資源的類型為 Job。
③ restartPolicy 指定什么情況下需要重啟容器。對(duì)于 Job,只能設(shè)置為 Never 或者 OnFailure。對(duì)于其他 controller(比如 Deployment)可以設(shè)置為 Always 。
Job的并行性
parallelism:設(shè)置并行運(yùn)行pod數(shù)量
completions:設(shè)置完成pod總數(shù)
定時(shí)Job
① batch/v2alpha1 是當(dāng)前 CronJob 的 apiVersion。
② 指明當(dāng)前資源的類型為 CronJob。
③ schedule 指定什么時(shí)候運(yùn)行 Job,其格式與 Linux cron 一致。這里 */1 * * * * 的含義是每一分鐘啟動(dòng)一次。
④ jobTemplate 定義 Job 的模板,格式與前面 Job 一致。
Kubernetes 默認(rèn)沒有 enable CronJob 功能,需要在 kube-apiserver 中加入這個(gè)功能。方法很簡(jiǎn)單,修改 kube-apiserver 的配置文件 /etc/kubernetes/manifests/kube-apiserver.yaml:
然后重啟 kubelet 服務(wù):systemctl restart kubelet
#kubectl api-versions 查看是否支持batch/v2alpha1