独立Kubelet教程:轻量级容器管理新体验
在这个详尽的教程中,我们将指导您如何在Container Linux上以独立模式运行Kubernetes的【Kubelet】组件,并部署一个应用程序,通过静态Pod进行测试和升级。这个教程旨在展示在单个计算实例上,无需完整Kubernetes功能集也能高效管理容器的优势。
原则与目标
有时,我们只想在一个或多个计算实例上简单地运行容器,而不需要整个Kubernetes集群。有很多选择,如使用docker-compose或配置管理工具(如ansible或chef)。然而,在独立模式下运行的Kubelet提供了一个更优选项,它允许您利用pod manifest来管理容器,享受紧密耦合应用作为一个单一单元运行的好处,同时还能利用一些高级特性,如初始化容器、CNI网络和内置健康检查。单独运行Kubelet也是向完整Kubernetes集群平滑过渡的一种方式,你的pod manifest可以被直接复用。
计算实例
首先,创建名为standalone-kubelet
的计算实例:
gcloud compute instances create standalone-kubelet \
--async \
--boot-disk-size 200 \
--can-ip-forward \
--image-family coreos-stable \
--image-project coreos-cloud \
--machine-type n1-standard-1 \
--tags standalone-kubelet
然后允许HTTP流量进入standalone-kubelet
实例:
gcloud compute firewall-rules create allow-standalone-kubelet \
--allow tcp:80 \
--target-tags standalone-kubelet
安装独立Kubelet
登录到standalone-kubelet
计算实例:
gcloud compute ssh standalone-kubelet
下载Kubelet的systemd单位文件:
wget -q --show-progress --https-only --timestamping \
https://raw.githubusercontent.com/kelseyhightower/standalone-kubelet-tutorial/master/kubelet.service
将kubelet.service
移动到systemd配置目录:
sudo mv kubelet.service /etc/systemd/system/
重新加载守护进程,启动kubelet
服务:
sudo systemctl daemon-reload
sudo systemctl enable kubelet
sudo systemctl start kubelet
验证
Kubelet容器下载并初始化可能需要几分钟时间。验证Kubelet是否正在运行:
sudo systemctl status kubelet
静态Pods
接下来,您将部署一个响应HTTP请求的应用程序,展示其运行配置和版本。该应用将由初始化容器在HTTP服务开始之前进行配置初始化。一旦Pod启动,配置侧车将在每30秒更新一次应用程序配置。
再次登录到standalone-kubelet
计算实例:
gcloud compute ssh standalone-kubelet
确认没有运行中的容器:
sudo docker ps
确认没有安装的镜像:
sudo docker images
创建kubelet manifest目录:
sudo mkdir -p /etc/kubernetes/manifests
下载app-v0.1.0.yaml
pod清单:
wget -q --show-progress --https-only --timestamping \
https://raw.githubusercontent.com/kelseyhightower/standalone-kubelet-tutorial/master/pods/app-v0.1.0.yaml
将app-v0.1.0.yaml
移动到kubelet manifest目录:
sudo mv app-v0.1.0.yaml /etc/kubernetes/manifests/app.yaml
注意,我们将
app-v0.1.0.yaml
重命名为app.yaml
,防止应用被部署两次。每个Pod的metadata.name
必须是唯一的。
列出已安装的镜像:
sudo docker images
列出正在运行的容器:
docker ps
验证
此时,app
pod已在主机的80端口上运行。使用localhost地址向app
pod发送HTTP请求:
curl http://127.0.0.1
等待约30秒,再向app
pod发送另一个HTTP请求:
curl http://127.0.0.1
会发现
key
字段发生了变化。这是由configurator
侧车容器在app
pod内进行的更新。
远程访问测试
app
pod在主机网络的0.0.0.0:80
监听,可以通过standalone-kubelet
计算实例的外部IP访问。
获取standalone-kubelet
实例的外部IP:
EXTERNAL_IP=$(gcloud compute instances describe standalone-kubelet \
--format 'value(networkInterfaces[0].accessConfigs[0].natIP)')
使用standalone-kubelet
外部IP向app
pod发送HTTP请求:
curl http://${EXTERNAL_IP}
更新静态Pods
gcloud compute ssh standalone-kubelet
下载app-v0.2.0.yaml
pod清单:
wget -q --show-progress --https-only --timestamping \
https://raw.githubusercontent.com/kelseyhightower/standalone-kubelet-tutorial/master/pods/app-v0.2.0.yaml
将app-v0.2.0.yaml
移动到kubelet manifest目录:
sudo mv app-v0.2.0.yaml /etc/kubernetes/manifests/app.yaml
注意,我们将
app-v0.2.0.yaml
重命名为app.yaml
,覆盖当前的pod清单,迫使kubelet升级app
pod。
列出已安装的镜像:
docker images
验证
现在,app v0.2.0
已运行。使用localhost地址向app
pod发送HTTP请求:
curl http://127.0.0.1
清理
gcloud -q compute instances delete standalone-kubelet
gcloud -q compute firewall-rules delete allow-standalone-kubelet
项目特点
- 简易部署 - 单独运行Kubelet,无须搭建完整的Kubernetes集群,降低了使用门槛。
- 强大管理 - 使用pod manifest管理容器,支持初始化容器、CNI网络和健康检查,提供了强大的灵活性。
- 平滑迁移 - 能轻松从单机模式转换为集群模式,使得应用无缝升级。
- 成本效益 - 对于只需要基本容器管理需求的场景,独立Kubelet是一个成本效益高的解决方案。
如果你对Kubernetes的深入学习感兴趣,或者需要在简单的环境中快速测试和部署容器应用,那么这个开源项目绝对值得你尝试。立即动手实践,开启你的独立Kubelet之旅吧!