🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
本文主要介绍 K8s 的简介、架构以及常用命令。
一、K8s 起源
Kubernetes ( 简称为 K8s )最开始是由 Google 的工程师设计开发的。Google 作为 Linux 容器技术的早期贡献者之一,曾公开演讲介绍 Google 如何将一切都运行于容器之中。Google 一周内的容器部署超过 20 亿次,全部的工作都由内部平台 Borg 支撑。Borg 是 Kubernetes 的前身,几年来开发 Borg 的经验教训也成了影响 Kubernetes 中许多技术的主要因素。
二、简介
Kubernetes,简称 k8s(k,8个字符,s的组合)或者 “kube”,是一个开源的 Linux 容器自动化运维平台,它消除了容器化应用程序在部署、伸缩时涉及到的许多手动操作。换句话说,你可以将多台主机组合成集群来运行 Linux 容器,而 Kubernetes 可以帮助你简单高效地管理那些集群。构成这些集群的主机还可以跨越公有云、私有云以及混合云。
三、K8s 架构
各个组件的功能如下所示。
3.1 主节点 master 组件
(1)API Server
集群统一入口,各组件的协调者,提供认证、授权、访问控制、API注册和发现等机制,以 RESTful API 的方式提供接口服务,所有对象资源的增删改查和监听都由 API Server 处理后提交给 Etcd 存储。所有模块之前并不会之间互相调用,而是通过和 API Server 打交道来完成自己那部分的工作。
(2)Etcd
分布式键值存储系统集群,用于保存集群状态数据,如:Pod、Service 等资源对象信息。
另外,Etcd 有一个特性,可以调用它的 API 监听其中的数据,一旦数据发生变化,就会收到通知。有了这个特性之后,K8s 中的每个组件只需要监听 Etcd 中数据,就可以知道自己应该做什么。
(3)Scheduler
负责对集群内部的资源进行调度,相当于调度员的角色,按照预定的调度策略将 Pod 调度到相应的机器上,调度程序根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
(4)Controller Manager
Controller Manager 是 K8s 的管理控制中心,控制器和资源一一对应,负责集群内 Node、Namespace、Service、Token、Replication 等资源对象的管理,使集群内的资源对象维持在预期的工作状态。每一个 controller 通过 api-server 提供的 restful 接口实时监控集群内每个资源对象的状态,当发生故障,导致资源对象的工作状态发生变化,就进行干预,尝试将资源对象从当前状态恢复为预期的工作状态,常见的 controller 有 Namespace Controller、Node Controller、Service Controller、ServiceAccount Controller、Token Controller、ResourceQuote Controller、Replication Controller等。
(5)kubectl
通过 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具。
3.2 节点 node 组件
(1)Node
Node 是 K8s 集群中的节点,一个 Node 节点对应一台物理机或虚拟机,一个 Node 节点可以运行多个 Pod。
(2)Kubelet
运行在每个计算节点上。通过 API Server 提供的接口监测到 Scheduler 产生的 Pod 绑定事件,然后从 Etcd 获取 Pod 清单,下载镜像并启动容器。同时监视分配给该 节点的 Pods,周期性获取容器状态,再通过 API Server 通知各个组件。
(3)kube-proxy
网络代理程序,在 Node 节点上实现 Pod 网络代理,负责为 Service 提供 Cluster 内部的服务发现、网络规划和负载均衡。
(4)Pod
Pod 是 K8s 最小的操作单元。一个 Pod 代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。
(5)Container
Container 表示容器,是镜像运行后的实例。
四、常用命令
执行 K8s 命令都是通过 kubectl 工具进行的。
4.1 Node 节点相关命令
(1)查看集群中所有节点
[node@k8s-master ~]$ kubectl get nodes
NAME STATUS AGE
k8s-node-1 Ready 50d
k8s-node-2 Ready 50d
[node@k8s-master ~]$
如上所示,K8s 集群中有两个节点 k8s-node-1 和 k8s-node-2。
(2)查看节点的详细信息
[node@k8s-master ~]$ kubectl get nodes -o wide
NAME STATUS AGE EXTERNAL-IP
k8s-node-1 Ready 50d <none>
k8s-node-2 Ready 50d <none>
[node@k8s-master ~]$
(3)删除指定节点
[node@k8s-master ~]$ kubectl delete node k8s-node-1
node "k8s-node-1" deleted
[node@k8s-master ~]$
4.2 Pod 相关命令
(1)列出 Pod 信息
[node@k8s-master demployment]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-6587ffc4b-6t4k4 1/1 Running 0 3m3s
myapp-6587ffc4b-dj887 1/1 Running 0 3m2s
myapp-6587ffc4b-j2jw5 1/1 Running 0 3m3s
myapp-6587ffc4b-p72wn 1/1 Running 0 3m3s
myapp-6587ffc4b-qv4qd 1/1 Running 0 3m2s
myapp-6587ffc4b-wnqmc 1/1 Running 0 3m2s
[node@k8s-master demployment]$
(2)列出 Pod 详细信息
[node@k8s-master demployment]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-6587ffc4b-6t4k4 1/1 Running 0 3m45s 10.244.109.71 k8s-node-1 <none> <none>
myapp-6587ffc4b-dj887 1/1 Running 0 3m44s 10.244.109.68 k8s-node-1 <none> <none>
myapp-6587ffc4b-j2jw5 1/1 Running 0 3m45s 10.244.109.70 k8s-node-1 <none> <none>
myapp-6587ffc4b-p72wn 1/1 Running 0 3m45s 10.244.235.193 k8s-master <none> <none>
myapp-6587ffc4b-qv4qd 1/1 Running 0 3m44s 10.244.235.194 k8s-master <none> <none>
myapp-6587ffc4b-wnqmc 1/1 Running 0 3m44s 10.244.109.69 k8s-node-1 <none> <none>
[node@k8s-master demployment]$
(3)删除指定 Pod
[node@k8s-master demployment]$ kubectl delete pod myapp-6587ffc4b-6t4k4
pod "myapp-6587ffc4b-6t4k4" deleted
[node@k8s-master demployment]$
五、下期预告
下一篇文章将介绍 K8s 的命名空间,敬请期待!
参考链接:
https://www.cnblogs.com/renshengdezheli/p/16686769.html
k8s介绍及部署方式_k8s部署方式_南城诗客^的博客-CSDN博客
https://www.cnblogs.com/yjf512/p/11187064.html
K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
云原生架构之【Kubernetes(K8s)】第一部分:技术评估 - 简书
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞