作者: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 架构

图1 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 nodesNAME STATUSAGEk8s-node-1 Ready 50dk8s-node-2 Ready 50d[node@k8s-master ~]$

如上所示,K8s 集群中有两个节点 k8s-node-1 和 k8s-node-2。

(2)查看节点的详细信息

[node@k8s-master ~]$ kubectl get nodes -o wideNAME STATUSAGE EXTERNAL-IPk8s-node-1 Ready 50d k8s-node-2 Ready 50d [node@k8s-master ~]$

(3)删除指定节点

[node@k8s-master ~]$ kubectl delete node k8s-node-1node "k8s-node-1" deleted[node@k8s-master ~]$

4.2 Pod 相关命令

(1)列出 Pod 信息

[node@k8s-master demployment]$ kubectl get podsNAMEREADY STATUSRESTARTS AGEmyapp-6587ffc4b-6t4k4 1/1 Running 03m3smyapp-6587ffc4b-dj887 1/1 Running 03m2smyapp-6587ffc4b-j2jw5 1/1 Running 03m3smyapp-6587ffc4b-p72wn 1/1 Running 03m3smyapp-6587ffc4b-qv4qd 1/1 Running 03m2smyapp-6587ffc4b-wnqmc 1/1 Running 03m2s[node@k8s-master demployment]$

(2)列出 Pod 详细信息

[node@k8s-master demployment]$ kubectl get pods -o wideNAMEREADY STATUSRESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmyapp-6587ffc4b-6t4k4 1/1 Running 03m45s 10.244.109.71k8s-node-1  myapp-6587ffc4b-dj887 1/1 Running 03m44s 10.244.109.68k8s-node-1  myapp-6587ffc4b-j2jw5 1/1 Running 03m45s 10.244.109.70k8s-node-1  myapp-6587ffc4b-p72wn 1/1 Running 03m45s 10.244.235.193 k8s-master  myapp-6587ffc4b-qv4qd 1/1 Running 03m44s 10.244.235.194 k8s-master  myapp-6587ffc4b-wnqmc 1/1 Running 03m44s 10.244.109.69k8s-node-1  [node@k8s-master demployment]$

(3)删除指定 Pod

[node@k8s-master demployment]$ kubectl delete pod myapp-6587ffc4b-6t4k4pod "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)】第一部分:技术评估 – 简书


感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言,感谢大家的一路支持!猿哥将持续输出「优质文章回馈大家!