# K8s常用功能实践

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 解决方案
> 标签: AI, Kubernetes, Docker
> 原文链接: http://117.50.162.249:3000/yun/articles/1319

---

# K8s常用功能实践

> 来源: https://www.ucloud.cn/yun/129615.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

K8s常用功能实践

## **点击上方“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/

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_000.png)

获取安装包后不断下一步就可以完成安装。

**2. 安装启动K8s**

```
Settings->Kubernetes->Enable Kubernetes->Apply& Restart
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_001.png)

上图左下角Docker和K8s图标显示绿色表示运行正常，此时你已得到Docker、单节点K8s集群和K8s命令行工具kubectl。

**3. 命令验证安装情况**

运行docker version和kubectlversion，正常输出表示安装并运行正常。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_002.png)

## 

K8s上运行应用

运行kubectl get nodes结果如下图，表示你已连接K8s集群，确认集群正在运行，输出只有一行，是因为它是单节点集群，由单节点同时充当主节点（Master）和工作节点（Node）。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_003.png)

**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镜像存在，如下图：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_004.png)

2.3 仓库托管镜像

docker push上传镜像到仓库：docker push sunhuawei23/k8s-test:v.11。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_005.png)

访问Docker Hub，确认镜像存在：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_006.png)

2.4 K8s部署应用

容器化的应用运行在K8s的Pod中，Pod是K8s中最基本的操作单元。

kubectl apply部署Pod：kubectl apply -f pod.yml

查看运行的Pod：kubectl get pods

如下图：Pod对象first-pod已创建，并处于Running状态。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_007.png)

2.5 连接到应用

Pod已启动，应用在运行，但需要连接到应用，Service来帮忙，Server是提供相同服务的Pod的对外访问接口。

kubectl apply部署Service：kubectl apply -f svc-local.yml

查看运行的Service：kubectl get svc

如下图：Service对象svc-local已启动和运行。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_008.png)

打开浏览器通过指定的30666端口（svc-local的PORT端口值）能正常访问web页面，如下图：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_009.png)

自此已将一个应用容器化，将其部署到了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已准备就绪。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_010.png)

查看对应的3副本的Pod：kubectl get pods。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_011.png)

删除其中一个Pod：kubectl delete pod qsk-deploy-59cd8875dc-x4nv4。

Pod停止时，K8s会自动检测到并重新启动这个Pod，如下图：再次查看Pod时，一个新的Pod已创建。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_012.png)

## 

应用扩缩容

**将如下图副本数从3改为5：**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_013.png)

修改配置后重新发送给K8s：kubectl apply -f deploy.yml

副本数由3扩容到5，K8s将启动2个副本，如下图：从ContainerCreating到Running；

**同理，**缩容可以将Pod数量减少到期望状态。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_014.png)

## 

滚动更新

重新容器化应用并上传V12版本的镜像：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_015.png)

将最后一行版本由sunhuawei23/k8s-test:v.11修改为sunhuawei23/k8s-test2:v.12

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_016.png)

再次发送给K8s：kubectl apply -f deploy.yml

查看滚动更新进展：kubectl rollout status deployment qsk-deploy，如下图表示已完成一个应用的更新：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_017.png)

写在最后，此文没有过多介绍相关概念或术语，只是介绍了K8s最基本的功能，仅冰山一角，容器的世界是丰富多彩的，而**K8s作为容器的管理工具更令人神往，有空可以畅游一番。**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_018.png)

## 本文作者：孙华伟

## 本文来源：IT那活儿（上海新炬王翦团队）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129615/images/129615_019.png)