暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

K8s常用功能实践

IT那活儿 2022-03-21
751

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

K8s是Kubernetes的简称,其中8代表Kubernetes中“K”与“s”之间的8个字符。K8s是Google开源的容器集群管理系统,为容器化应用提供了资源调度、部署运行、服务发现、自我修复、扩缩容和滚动更新等功能。我们先不深究K8s的各种概念和专业术语,先搭建一个可用的系统,把玩起来,一起走进它的世界,快速建立起感性的认识,再慢慢揭开它神秘的面纱。

获取K8s

获取K8s的方法很多,我们选择在Windows上安装Docker Desktop来获取。
1. 下载安装Docker Desktop
下载链接https://docs.docker.com/desktop/windows/install/
获取安装包后不断下一步就可以完成安装。
2. 安装启动K8s
Settings->Kubernetes->Enable Kubernetes->Apply& Restart
上图左下角Docker和K8s图标显示绿色表示运行正常,此时你已得到Docker、单节点K8s集群和K8s命令行工具kubectl。
3. 命令验证安装情况
运行docker version和kubectlversion,正常输出表示安装并运行正常。

K8s上运行应用

运行kubectl get nodes结果如下图,表示你已连接K8s集群,确认集群正在运行,输出只有一行,是因为它是单节点集群,由单节点同时充当主节点(Master)和工作节点(Node)。
1. K8s由Master和Node节点组成,最简单的部署是集Master和Node于一身的单台主机,一般是至少3台主机的集群化部署。
1.1 Master是K8s集群的控制节点
每个K8s集群中至少有一个Master节点,来负责整个集群的管理和控制。
Master节点运行的主要进程有:K8s API Server、K8s Controller Manager、K8s Scheduler、etcd。
  • K8s API Server:提供HTTP RESTful API接口的主要服务,是K8s里对所有资源对象进行增删改查等操作的唯一入库,也是集群控制的入口进程;
  • K8s Controller Manager:K8s里所有资源对象的自动化控制中心;
  • K8s Scheduler:负责资源调度的进程;
  • etcd:存储所有需要持久化的数据。
1.2 Node是K8s集群中的工作负载节点
Master会根据实际情况将某些任务分配给Node。当某个Node节点故障时,其上的工作负载会被Master转移至其他Node上。
Node节点运行的主要进程有:kubelet、kube-proxy、容器化运行时(如Docker)。
  • kubelet:负责pod对应容器的创建、启停等任务;
  • kube-proxy:实现K8s Service的通信与负载均衡机制的服务;
  • 容器化:负责本机容器的创建和管理。
2. K8s部署应用的工作流程
2.1 开发应用代码
此处不是重点,示例是一个简单的web页面。
2.2 构建容器镜像
docker image build 创建镜像:docker image build -t k8s-test:v.11 ;
docker tag 为镜像添加标签:docker tag k8s-test:v.11 sunhuawei23/k8s-test:v.11。
docker images列出镜像列表:docker images确认sunhuawei23/k8s-test镜像存在,如下图:
2.3 仓库托管镜像
docker push上传镜像到仓库:docker push sunhuawei23/k8s-test:v.11。
访问Docker Hub,确认镜像存在:
2.4 K8s部署应用
容器化的应用运行在K8s的Pod中,Pod是K8s中最基本的操作单元。
kubectl apply部署Pod:kubectl apply -f pod.yml
查看运行的Pod:kubectl get pods
如下图:Pod对象first-pod已创建,并处于Running状态。
2.5 连接到应用
Pod已启动,应用在运行,但需要连接到应用,Service来帮忙,Server是提供相同服务的Pod的对外访问接口。
kubectl apply部署Service:kubectl apply -f svc-local.yml
查看运行的Service:kubectl get svc
如下图:Service对象svc-local已启动和运行。
打开浏览器通过指定的30666端口(svc-local的PORT端口值)能正常访问web页面,如下图:
自此已将一个应用容器化,将其部署到了K8s,并连接成功。

自我修复

Deployment用于自动创建指定数量的Pod实例,K8s实时监控Pod的副本数量,保证其与Deployment中声明的replicas数量一致。Deployment对象自动创建关联的ReplicaSet对象,ReplicaSet对象用于实现Pod的扩缩容。

kubectl delete删除对象,这里删除Pod:kubectl delete pod first-pod

kubectl apply部署Deployment:kubectl apply -f deploy.yml

查看deploy:kubectl get deployments

如下图:3副本的Deployment对象qsk-deploy已准备就绪。
查看对应的3副本的Pod:kubectl get pods。
删除其中一个Pod:kubectl delete pod qsk-deploy-59cd8875dc-x4nv4。
Pod停止时,K8s会自动检测到并重新启动这个Pod,如下图:再次查看Pod时,一个新的Pod已创建。

应用扩缩容

将如下图副本数从3改为5:
修改配置后重新发送给K8s:kubectl apply -f deploy.yml
副本数由3扩容到5,K8s将启动2个副本,如下图:从ContainerCreating到Running;
同理,缩容可以将Pod数量减少到期望状态。

滚动更新

重新容器化应用并上传V12版本的镜像:
将最后一行版本由sunhuawei23/k8s-test:v.11修改为sunhuawei23/k8s-test2:v.12
再次发送给K8s:kubectl apply -f deploy.yml
查看滚动更新进展:kubectl rollout status deployment qsk-deploy,如下图表示已完成一个应用的更新:
写在最后,此文没有过多介绍相关概念或术语,只是介绍了K8s最基本的功能,仅冰山一角,容器的世界是丰富多彩的,而K8s作为容器的管理工具更令人神往,有空可以畅游一番。

本文作者:孙华伟

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论