一、Pods
Pod是一组容器;这些容器共享存储、网络以及怎样运行这些容器的声明。Pod 中的内容总是并置的并且一同调度,在共享的上下文中运行。Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器,这些容器是相对紧密的耦合在一起的。
- 在Docker的世界中,容器 是最小的可控单元
- 在k8s的世界中,Pod 是最小的可控单元
-
Pod 包含 一个或多个容器
image.png
Pod.png
Pod(容器组)是一个k8s中一个抽象的概念,用于存放一组 Container (可包含一个或多个 Container 容器,即图上正方形),以及这些 Container 的一些共享资源
- 共享存储,称为卷(Volumes),上图紫色圆柱
- 网络,每个 Pod(容器组)在集群中有个唯一的IP,Pod (容器组)中的 Container(容器)共享该 IP 地址
- Container (容器) 的基本信息
二、Node
Pod(容器组)总是在 Node(节点)上运行。Node(节点)是kubernetes集群中的计算机,可以是虚拟机或物理机。每个Node都由 master 管理。一个Node可以有多个Pod,kubernetes master 会根据每个 Node 上可用资源的情况,自动调度 Pod 到最佳的 Node上
1、每个Node(节点)至少运行
- kubelet:负责 master 节点和worker节点之间通信的进程;管理 Pod 和 Pod内运行的Controller
- kube-Proxy:负责进行流量转发
-
容器运行环境(如:Docker)负责下载镜像、创建和运行容器等
Node.png
- kubelet启动的pod每个都由ip,全集群任意位置均可访问
kubeadm init \
--apiserver-advertise-address=172.20.173.235 \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.169.0.0/16
- 注意:pod-cidr 与 service-cidr
- cidr 无类别域间路由(Classless Inter-Domain Routing、CIDR)
- 指定一个网络可达范围 Pod 的子网范围 + service 负载均衡网络的子网范围 + 本机ip的子网范围不能有重复域
- --apiserver-advertise-address=master节点 私有ip(不能随便写)
- --pod-network-cidr=192.169.0.0/16:设置 Pod 的 ip 范围(可以随便)
- --service-cidr=10.96.0.0/16 :设置 Service 的 ip 范围(可以随便写,不能与pod的ip有交集)
三、部署应用
1、创建一次部署工作,带有自愈机制
- 帮助命令
kubectl create --help
- 部署应用
kubectl create deployment 这次部署的名称 --image=nginx
kubectl create deployment my-nginx --image=nginx
-
这次部署最终在一个机器上有一个 Pod,这个Pod其实本质里面就是一个容器
-
部署应用,同时设置副本数
kubectl create deployment my-nginx --image=nginx --replicas=3
- 部署应用,同时设置端口
kubectl create deployment my-nginx --image=nginx --port=80
Department(部署)的意义
- 在 k8s中,通过发布 Department,可以创建应用程序(docker image)的实例(docker Container),这个实例会被包含在称为 Pod 的概念中,Pod 是 k8s 中最小可管理单元
- 在 k8s 集群中发布 Department 后,Department 将指示 k8s 如何创建和更新应用程序的实例,master 节点将应用程序实例调度到集群中的具体的worker节点上
- 创建应用程序实例后,kubernetes Deployment Controller 会持续监控这些实例。如果运行实例的worker 节点关机或删除,则kubernetes Department Controller 将在集群中资源最优的另一个worker节点上重新创建一个新的实例。这提供了一种自我修复机制来解决机器故障或维护问题
-
Deployment 处于 master 节点上,通过发布 Deployment,master 节点会选择适合的 worker 节点创建 Container (图中正方体),Container会被包含在 Pod (蓝色圆圈)里
image.png
四、故障排除
1、显示资源列表
kubectl get 资源类型
kubectl get deployments
2、获取 Deployments 类型资源列表
![](https://img.haomeiwen.com/i2338406/53b3a9d1f8944409.png)
3、获取 Pod 类型资源列表
kubectl get pod
![](https://img.haomeiwen.com/i2338406/eb0944d0b14d43b6.png)
4、获取 node 类型资源列表
kubectl get node
![](https://img.haomeiwen.com/i2338406/efdc6b3c7e30a9c2.png)
5、获取 命名空间下的 类型资源列表
5.1、查看全部命名空间
kubectl get deployments -A
或
kubectl get deployment --all-namespaces
![](https://img.haomeiwen.com/i2338406/9b2636fa978003d8.png)
5.2、查看特定命名空间
kubectl get deployment -n default
![](https://img.haomeiwen.com/i2338406/b85bfd93d1b9a51f.png)
6、不是所有资源都有命名空间
# 在命名空间里
kubectl api-resources --namespaced=true
# 不在命名空间里
kubectl api-resources --namespaced=false
7、显示有关资源的详细信息
kubectl describe pod my-nginx
或者
# 查看名称为 my-nginx 的 deployment 的信息
kubectl describe deployment my-nginx
8、查看 Pod 中的容器的打印日志
kubectl logs Pod名称
kubectl logs my-dep-5b7868d854-6j2zl
9、进入Pod
kubectl exec -it my-dep-5b7868d854-6j2zl /bin/bash
# v1.21.0 推荐使用下面命令
kubectl exec -it my-dep-5b7868d854-6j2zl -- /bin/bash
五、小结
kubectl create 资源 #创建任意资源
kubectl create deploy #创建部署,拥有【自愈功能】
kubectl run #只创建一个Pod,不具有 【自愈功能】
kubectl get 资源名(node/pod/deploy) -n xxx(指定名称空间,默认是default) #获取资源
kubectl describe 资源名(node/pod/deploy) xxx #描述某个资源的详细信息
kubectl logs 资源名 ##查看日志
kubectl exec -it pod名 -- 命令 #进pod并执行命令
kubectl delete 资源名(node/pod/deploy) xxx #删除资源
网友评论