如何在CoreOS集成Kubernetes核心組件Kubelet
這周我們?cè)贑oreOS Linux的alpha開發(fā)版中集成了kubelet——Kubernetes的一個(gè)核心內(nèi)嵌組件。Kubelet負(fù)責(zé)維護(hù)pod(應(yīng)用實(shí)例)集合。Pod集合由本地系統(tǒng)的一個(gè)或多個(gè)容器構(gòu)成。在Kubernetes集群中,kubelet作為本地代理,通過訪問 Kubernetes的API服務(wù)器,監(jiān)控PodSpecs的狀態(tài)。Kubelet也負(fù)責(zé)注冊(cè)節(jié)點(diǎn)到Kubernetes,發(fā)送事件和pod狀態(tài),匯報(bào)資源利用率。
Kubelet在Kubernetes集群中扮演著非常重要的角色,但它也可以在單機(jī)(standalone)模式下工作。這篇文章接下來將會(huì)重點(diǎn)介紹運(yùn)行在單機(jī)模式下的Kubelet,比如運(yùn)行單節(jié)點(diǎn)的Kubernetes集群,借助 cAdvisor 內(nèi)建工具監(jiān)控容器資源利用率。
首先我們要安 kubelet并運(yùn)行起來。請(qǐng)?jiān)贑oreOS Linux 773.1.0或更新版本中使用本指南。
用systemd配置Kubelet
CoreOS Linux默認(rèn)集成了kubelet,并做了安全優(yōu)化和易用性優(yōu)化。但我們將會(huì)放寬安全限制以支持高級(jí)容器。這需要在單節(jié)點(diǎn)Kubernetes 上跑代理組件,該組件需要iptables的操作權(quán)限,以方便配置 Kubernetes的服務(wù)發(fā)現(xiàn)模型。
創(chuàng)建 kubelet systemd(系統(tǒng)管理守護(hù)進(jìn)程) 單元
- sudo vim /etc/systemd/system/kubelet.service
- [Unit]
- Description=Kubernetes Kubelet
- Documentation=https://github.com/kubernetes/kubernetes
- [Service]
- ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests
- ExecStart=/usr/bin/kubelet \
- --api-servers=http://127.0.0.1:8080 \
- --allow-privileged=true \
- --config=/etc/kubernetes/manifests \
- --v=2
- Restart=on-failure
- RestartSec=5
- [Install]
- WantedBy=multi-user.target
啟動(dòng)kubelet服務(wù)
配置好systemd單元文件后,使用systemctl命令啟動(dòng)Kubelet:
- sudo systemctl daemon-reload
- sudo systemctl start kubelet
為確保kubelet能開機(jī)自啟動(dòng),需要激活服務(wù):
- sudo systemctl enable kubelet
這時(shí)kubelet服務(wù)應(yīng)該已經(jīng)跑起來了。你可以用systemctl狀態(tài)命令確認(rèn):
- sudo systemctl status kubelet
啟動(dòng)一個(gè)單節(jié)點(diǎn)Kubernetes集群
Kubelet提供了一個(gè)非常方便的接口來管理容器。Kubelet有一個(gè)清單(manifest)字典,每20秒會(huì)默認(rèn)監(jiān)控一次以更新pod的manifest文件。在這之前, 需要通過Kubelet Systemd單元中的--config標(biāo)志配置文件目錄 /etc/kubernetes/manifests。
Pod manifest文件用JSON或YAML文件格式化并描述文件卷集合和一個(gè)或多個(gè)容器。我們可以使用一個(gè)在manifest目錄的pod manifest,部署一個(gè)單節(jié)點(diǎn)Kubernetes集群。
下載 Kubernetes pod manifest
- wget https://raw.githubusercontent.com/coreos/pods/master/kubernetes.yaml
在互聯(lián)網(wǎng)下載pod manifest會(huì)有存在安全風(fēng)險(xiǎn),所以請(qǐng)?jiān)谑褂盟鼈冎皺z查所有pod manifest的內(nèi)容。
- cat kubernetes.yaml
此時(shí)我們只需要拷貝kubernetes.yaml這個(gè)pod manifest到kubelet的manifest目錄以啟動(dòng)單節(jié)點(diǎn)集群。
- sudo cp kubernetes.yaml /etc/kubernetes/manifests/
復(fù)制完成后,你可以使用標(biāo)準(zhǔn)Docker命令行工具看到Docker鏡像和容器啟動(dòng):
- sudo docker images sudo docker ps
幾分鐘后,Kubernetes集群就可以運(yùn)行起來了。接下來你可以下載官方的Kubernetes客戶端工具。
下載 Kubernetes 客戶端
kubectl是官方的命令行工具,用于和Kubernetes集群交互。每個(gè)Kubernetes的發(fā)行版都包含一個(gè)新的kublet版本。下載并更改它為可執(zhí)行程序:
- wget https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kubectl
- chmod +x kubectl
Kubectl可用于獲取運(yùn)行的集群信息。
- ./kubectl cluster-info
Kubernetes master運(yùn)行在http://localhost:8080。
kubectl也可用于啟動(dòng)pods。
- ./kubectl run nginx --image=nginx
用get pods命令查看運(yùn)行的 pods:
- ./kubectl get pods
更多Kubernetes細(xì)節(jié)請(qǐng)翻閱 Kubernetes on CoreOS docs。
#p#
用cAdvisor監(jiān)控容器
Kubelet內(nèi)置打包了cAdvisor,它用于收集、合計(jì)、處理并導(dǎo)出給定系統(tǒng)的運(yùn)行中容器的信息。cAdvisor 包含內(nèi)置web接口,可通過4194端口訪問。
[ cadvisor web 界面 ]
通過cAdvisor web UI,可很方便查看系統(tǒng)資源利用狀況和處理列表。
[ 系統(tǒng)利用狀況圖 ]
cAdvisor也可用于監(jiān)控特殊容器,例如在Kubernetes pod里運(yùn)行的 kube-apiserver:
[ 用 cadvisor查看容器信息 ]
想了解更多cAdvisor信息請(qǐng)翻閱upstream docs。
CoreOS和Kubernetes的更多信息
CoreOS Linux鏡像中集成kubelet表明我們對(duì)(支持)Kubernetes的承諾和要為我們用戶帶來最好的開源容器技術(shù)的(決心)。原生支持了 Kubernetes kubelet ,我們希望提升Kubernetes的部署效率,并提供健壯的接口以管理和監(jiān)控CoreOS系統(tǒng)上的容器。