当前位置:网站首页>kubernetes 的Deployment(部署),Service概念,动态扩缩容
kubernetes 的Deployment(部署),Service概念,动态扩缩容
2022-07-24 05:24:00 【魔舞清华】
官网文档地址:https://kubernetes.io/zh/docs/home/ (k8s官方有详细文档,学习最好去官网)
Deployment(部署)
在k8s中,通过发布 Deployment,可以创建应用程序 (docker image) 的实例 (docker container),这个实例会被包含在称为 Pod 的概念中,Pod 是 k8s 中最小可管理单元。
在 k8s 集群中发布 Deployment 后,Deployment 将指示 k8s 如何创建和更新应用程序的实例,master 节点将应用程序实例调度到集群中的具体的节点上。
创建应用程序实例后,Kubernetes Deployment Controller 会持续监控这些实例。如果运行实例的 worker 节点关机或被删除,则 Kubernetes Deployment Controller 将在群集中资源最优的另一个 worker 节点上重新创建一个新的实例。这提供了一种自我修复机制来解决机器故障或维护问题。
在容器编排之前的时代,各种安装脚本通常用于启动应用程序,但是不能够使应用程序从机器故障中恢复。通过创建应用程序实例并确保它们在集群节点中的运行实例个数,Kubernetes Deployment 提供了一种完全不同的方式来管理应用程序。
Deployment 处于 master 节点上,通过发布 Deployment,master 节点会选择合适的 worker 节点创建 Container(即图中的正方体),Container 会被包含在 Pod (即蓝色圆圈)里。

通过kubernetes部署一个的nginx:
kubectl create deployment my-nginx --image=nginx
Kubernetes Service
- Kubernetes 的 Service 是一个抽象层,它定义了一组 Pod 的逻辑集,并为这些 Pod 支持外部流量暴露、负载平衡和服务发现。
- Service 使从属 Pod 之间的松耦合成为可能。 和其他 Kubernetes 对象一样, Service 用 YAML (更推荐) 或者 JSON 来定义. Service 下的一组 Pod 通常由 LabelSelector (请参阅下面的说明为什么您可能想要一个 spec 中不包含
selector的服务)来标记。 - 尽管每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在群集外部。Service 允许您的应用程序接收流量。Service 也可以用在 ServiceSpec 标记
type的方式暴露ClusterIP(默认) - 在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问。- NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用
<NodeIP>:<NodePort>从集群外部访问 Service。是 ClusterIP 的超集。 LoadBalancer- 在当前云中创建一个外部负载均衡器(如果支持的话),并为 Service 分配一个固定的外部IP。是 NodePort 的超集。ExternalName- 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本。
Service 和 Label
Service 通过一组 Pod 路由通信。Service 是一种抽象,它允许 Pod 死亡并在 Kubernetes 中复制,而不会影响应用程序。在依赖的 Pod (如应用程序中的前端和后端组件)之间进行发现和路由是由Kubernetes Service 处理的。
Service 匹配一组 Pod 是使用 标签(Label)和选择器(Selector), 它们是允许对 Kubernetes 中的对象进行逻辑操作的一种分组原语。标签(Label)是附加在对象上的键/值对,可以以多种方式使用:

命令: kubectl expose,可以暴露一个service
kubectl expose deployment tomcat6 --port=88 --target-port=80 --type=NodePort
--port:集群内访问service的端口 8912
--target-port: pod容器的端口 8080
--nodePort: 每个机器开发的端口
kubectl get svc:获取Kubernetes Service
如下截图:我我们对外暴露一个Kubernetes Service,我们可以通过端口31876外部访问


扩缩容
我们创建了一个 Deployment ,然后通过 服务提供访问 Pod 的方式。我们发布的 Deployment 只创建了一个 Pod 来运行我们的应用程序。当流量增加时,我们需要对应用程序进行伸缩操作以满足系统性能需求。
扩缩容命令:
kubectl scale --replicas=3 deployment xxx(部署名)
如下截图:
其他基本命令
kubectl get - 显示资源列表
kubectl get deployments:获取类型为Deployment的资源列表kubectl get pods: 获取类型为Pod的资源列表kubectl get nodes: 获取类型为Node的资源列表
…
kubectl describe - 显示有关资源的详细信息
kubectl describe pod xxxx: #查看名称为xxxx的Pod的信息kubectl describe deployment xxxx:查看名称为nginx的Deployment的信息
kubectl exec - 在pod中的容器环境内执行命令(和命令docker exec 类似)
kubectl exec -it xxx /bin/bash:在名称为xxx的Pod中运行bash
边栏推荐
猜你喜欢
随机推荐
Restful API introduction
LM393 voltage comparator and its typical circuit introduction
SSH Remote Access and control
Log collection and analysis platform
Summary browser object
联合国农产品数据分析
Ia class summary (2)
Login page + summary
Experiment: disk quota operation
Customize MVC 3.0
Custom MVC 1.0
Life warning Maxim
迭代器与生成器
Use of MySQL
PXE technology network installation
go的环境搭建和起步
Take you to understand the inventory deduction principle of MySQL database
JSP tag 02
Solution: exit status 1 and exit status 145 appear when the console uses NVM to control the node version
文件系统与日志分析





![JS: why [] = =! [] return true?](/img/36/94839bf4ce6bd06d2cbe989828c791.png)



