独立Kubelet教程:轻量级容器管理新体验

独立Kubelet教程:轻量级容器管理新体验

在这个详尽的教程中,我们将指导您如何在Container Linux上以独立模式运行Kubernetes的【Kubelet】组件,并部署一个应用程序,通过静态Pod进行测试和升级。这个教程旨在展示在单个计算实例上,无需完整Kubernetes功能集也能高效管理容器的优势。

原则与目标

有时,我们只想在一个或多个计算实例上简单地运行容器,而不需要整个Kubernetes集群。有很多选择,如使用docker-compose或配置管理工具(如ansiblechef)。然而,在独立模式下运行的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

项目特点

  1. 简易部署 - 单独运行Kubelet,无须搭建完整的Kubernetes集群,降低了使用门槛。
  2. 强大管理 - 使用pod manifest管理容器,支持初始化容器、CNI网络和健康检查,提供了强大的灵活性。
  3. 平滑迁移 - 能轻松从单机模式转换为集群模式,使得应用无缝升级。
  4. 成本效益 - 对于只需要基本容器管理需求的场景,独立Kubelet是一个成本效益高的解决方案。

如果你对Kubernetes的深入学习感兴趣,或者需要在简单的环境中快速测试和部署容器应用,那么这个开源项目绝对值得你尝试。立即动手实践,开启你的独立Kubelet之旅吧!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵鹰伟Meadow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值