Kubernetes 容器應(yīng)用

2018年7月27日16:47:36 發(fā)表評(píng)論 4,030 ℃

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

Kubernetes 容器應(yīng)用

kubectl describe replicaset nginx-deployment-6fb585c4cc #查看nginx-deployment-6fb585c4cc詳細(xì)信息

Kubernetes 容器應(yīng)用

Controlled By 指明此ReplicaSet是由Deploymnet nginx-deployment創(chuàng)建的。

kubectl get pod #查看pod

Kubernetes 容器應(yīng)用

kubectl describe pod nginx-deployment-6fb585c4cc-m4tp8 #查看nginx-deployment-6fb585c4cc-m4tp8詳細(xì)情況

Kubernetes 容器應(yīng)用

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。

Kubernetes 容器應(yīng)用

對(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)容為:

Kubernetes 容器應(yīng)用

3、Deployment配置文件簡(jiǎn)介

Kubernetes 容器應(yīng)用

① 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

Kubernetes 容器應(yīng)用

[k8s@master ~]$ kubectl apply -f nginx.yml

Kubernetes 容器應(yīng)用

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)控

Kubernetes 容器應(yīng)用

① 直接使用 Host 的網(wǎng)絡(luò)。

② 設(shè)置容器啟動(dòng)命令。

③ 通過 Volume 將 Host 路徑 /proc、/sys 和 / 映射到容器中。我們將在后面詳細(xì)討論 Volume。

執(zhí)行:kubectl apply -f node_exporter.yml

Kubernetes 容器應(yīng)用

7、Job

服務(wù)類容器

Deployment、ReplicaSet、DaemonSet

http server ,daemon

工作類容器

Job

一次性任務(wù)

Kubernetes 容器應(yīng)用

① 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ù)

Kubernetes 容器應(yīng)用

定時(shí)Job

Kubernetes 容器應(yīng)用

① 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:

Kubernetes 容器應(yīng)用

然后重啟 kubelet 服務(wù):systemctl restart kubelet

#kubectl api-versions 查看是否支持batch/v2alpha1

Kubernetes 容器應(yīng)用

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評(píng)論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: