如何在CoreOS集成Kubernetes核心組件Kubelet
這周我們在CoreOS Linux的alpha開發版中集成了kubelet——Kubernetes的一個核心內嵌組件。Kubelet負責維護pod(應用實例)集合。Pod集合由本地系統的一個或多個容器構成。在Kubernetes集群中,kubelet作為本地代理,通過訪問 Kubernetes的API服務器,監控PodSpecs的狀態。Kubelet也負責注冊節點到Kubernetes,發送事件和pod狀態,匯報資源利用率。
Kubelet在Kubernetes集群中扮演著非常重要的角色,但它也可以在單機(standalone)模式下工作。這篇文章接下來將會重點介紹運行在單機模式下的Kubelet,比如運行單節點的Kubernetes集群,借助 cAdvisor 內建工具監控容器資源利用率。
首先我們要安 kubelet并運行起來。請在CoreOS Linux 773.1.0或更新版本中使用本指南。
用systemd配置Kubelet
CoreOS Linux默認集成了kubelet,并做了安全優化和易用性優化。但我們將會放寬安全限制以支持高級容器。這需要在單節點Kubernetes 上跑代理組件,該組件需要iptables的操作權限,以方便配置 Kubernetes的服務發現模型。
創建 kubelet systemd(系統管理守護進程) 單元
- 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
啟動kubelet服務
配置好systemd單元文件后,使用systemctl命令啟動Kubelet:
- sudo systemctl daemon-reload
- sudo systemctl start kubelet
為確保kubelet能開機自啟動,需要激活服務:
- sudo systemctl enable kubelet
這時kubelet服務應該已經跑起來了。你可以用systemctl狀態命令確認:
- sudo systemctl status kubelet
啟動一個單節點Kubernetes集群
Kubelet提供了一個非常方便的接口來管理容器。Kubelet有一個清單(manifest)字典,每20秒會默認監控一次以更新pod的manifest文件。在這之前, 需要通過Kubelet Systemd單元中的--config標志配置文件目錄 /etc/kubernetes/manifests。
Pod manifest文件用JSON或YAML文件格式化并描述文件卷集合和一個或多個容器。我們可以使用一個在manifest目錄的pod manifest,部署一個單節點Kubernetes集群。
下載 Kubernetes pod manifest
- wget https://raw.githubusercontent.com/coreos/pods/master/kubernetes.yaml
在互聯網下載pod manifest會有存在安全風險,所以請在使用它們之前檢查所有pod manifest的內容。
- cat kubernetes.yaml
此時我們只需要拷貝kubernetes.yaml這個pod manifest到kubelet的manifest目錄以啟動單節點集群。
- sudo cp kubernetes.yaml /etc/kubernetes/manifests/
復制完成后,你可以使用標準Docker命令行工具看到Docker鏡像和容器啟動:
- sudo docker images sudo docker ps
幾分鐘后,Kubernetes集群就可以運行起來了。接下來你可以下載官方的Kubernetes客戶端工具。
下載 Kubernetes 客戶端
kubectl是官方的命令行工具,用于和Kubernetes集群交互。每個Kubernetes的發行版都包含一個新的kublet版本。下載并更改它為可執行程序:
- wget https://storage.googleapis.com/kubernetes-release/release/v1.0.3/bin/linux/amd64/kubectl
- chmod +x kubectl
Kubectl可用于獲取運行的集群信息。
- ./kubectl cluster-info
Kubernetes master運行在http://localhost:8080。
kubectl也可用于啟動pods。
- ./kubectl run nginx --image=nginx
用get pods命令查看運行的 pods:
- ./kubectl get pods
更多Kubernetes細節請翻閱 Kubernetes on CoreOS docs。
#p#
用cAdvisor監控容器
Kubelet內置打包了cAdvisor,它用于收集、合計、處理并導出給定系統的運行中容器的信息。cAdvisor 包含內置web接口,可通過4194端口訪問。
[ cadvisor web 界面 ]
通過cAdvisor web UI,可很方便查看系統資源利用狀況和處理列表。
[ 系統利用狀況圖 ]
cAdvisor也可用于監控特殊容器,例如在Kubernetes pod里運行的 kube-apiserver:
[ 用 cadvisor查看容器信息 ]
想了解更多cAdvisor信息請翻閱upstream docs。
CoreOS和Kubernetes的更多信息
CoreOS Linux鏡像中集成kubelet表明我們對(支持)Kubernetes的承諾和要為我們用戶帶來最好的開源容器技術的(決心)。原生支持了 Kubernetes kubelet ,我們希望提升Kubernetes的部署效率,并提供健壯的接口以管理和監控CoreOS系統上的容器。