1.什么是Kubernetes
Kubernetes简称K8S,其底层基于容器进行编排,早期支持docker作为底层的容器运行时,从K8S 1.24+版本之后,默认采用看containerd作为容器运行时。
官方文档:
https://kubernetes.io/zh-cn/releases/download/
2.为什么要使用K8S
1.它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。
Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。
2.Google 每周运行数十亿个容器,Kubernetes 基于与之相同的原则来设计,能够在不扩张运维团队的情况下进行规模扩展。
3.无论是本地测试,还是跨国公司,Kubernetes 的灵活性都能让你在应对复杂系统时得心应手。
4.Kubernetes是开源系统,可以自由地部署在企业内部,私有云、混合云或公有云,让您轻松地做出合适的选择。
3.Kubernetes(K8S)的重要程度
简而言之,必精通技能。
4.Kubernetes和docker的简史
- 2013年docker开源,IT界的福音,备受关注
- 2014.06 Google有15年的容器编排Borg(博格,商业产品)使用经验,并将K8S(基于borg系统使用go语言研发)底层基于docker作为容器运行时开源
- 2014.12 docker inc公司推出了K8S竞品,docker swarm
- Google kubernets vs docker inc swarm 【3年对抗赛】 2017年年底结束,k8s完胜。(k8s 72% vs swarm %13)
- 2014 coreOS 公司推出了rkt容器管理工具并站队K8S
- 2015 Google公司将K8S开源并贡献给了CNCF组织,成为该组织的第一个毕业项目。
- 2015 docker inc公司推出了OCI提议,主要针对容器运行时和镜像规范,并开源了runc。
- 2016 Google推出了CRI规范,目前市面上没有任何产品可以满足,于是就开源了docker-shim组件(会调用docker接口并满足cri规范)支持CRI接口;
- 2016,RedHat公司基于cri-o(既符合CRI也符合OCI规范)开发框架让rkt容器管理工具支持CRI接口;
- 2017,docker inc公司将containerd从docker engine剥离,并将containerd开源给了CNCF组织,
- containerd底层调用runc,因此该产品是支持OCI提议的;
- containerd组件本身不支持CRI,因此社区大佬们(包含国内外)集体开发cri-containerd组件,最后合并到containerd项目
- 2018 年国内开始流行K8S,各大云厂商已经开始大规模使用K8S集群,
- 阿里云的ACK的SAAS产品
- 腾讯云的TKE的SAAS产品
- 华为云的CCE的SAAS产品
- ucloud的UK8S的SAAS产品
- 亚马逊的Amazon EKS的SAAS产品
- 京东云,百度云等
- 2018年,coreOS公司被Redhat以2.5亿美元收购。
- 2018年10月29日,IBM宣布以340亿美元的价格收购Red Hat。
- 曾经一度,Docker方面的炒作非常猛。
- Docker从Greylock Partners、Insight Partners和红杉资本等大牌投资者处筹资超过2.7亿美元,
- 2018年估值达到最高峰:13.2亿美元。
- 2019年2月,Docker一分为二,将企业业务出售给了云咨询公司Mirantis(对于OpenStack代码贡献量非常大,能排到前3)。
- 2020年,Google宣布K8S将在1.22+版本后弃用docker容器运行时,当时年底发布的最新版是1.20.X;
- 2020年3月11日公布的,当时Docker宣布被云计算软件巨头微软(Microsoft)以 6.7亿美元收购。
- 2021年底 K8S 1.23的RC版本发布;
- 2022年初,K8S 1.24横空出世,直接将docker-shim组件移除,而是使用containerd作为容器运行时;
- 2023年初,K8S 1.27.X发布;
- 2023年3月,K8S 1.23.17 发布了最后一个支持docker-shim的版本。
- docker和Mirantis公司作为合作伙伴,将维护该项目,运维小伙伴如果需要在K8S 1.24及以后的版本使用docker的话,需要单独cri-docker组件。
- 2024年初,K8S 1.30.x版本发布
- 2024年12月,K8S 1.32.x版本发布
- 2025年年初,K8S 1.33.X版本发布
- 2013年docker开源,IT界的福音,备受关注
- 2014.06 Google有15年的容器编排Borg(博格,商业产品)使用经验,并将K8S(基于borg系统使用go语言研发)底层基于docker作为容器运行时开源
- 2014.12 docker inc公司推出了K8S竞品,docker swarm
- Google kubernets vs docker inc swarm 【3年对抗赛】 2017年年底结束,k8s完胜。(k8s 72% vs swarm %13)
- 2014 coreOS 公司推出了rkt容器管理工具并站队K8S
- 2015 Google公司将K8S开源并贡献给了CNCF组织,成为该组织的第一个毕业项目。
- 2015 docker inc公司推出了OCI提议,主要针对容器运行时和镜像规范,并开源了runc。
- 2016 Google推出了CRI规范,目前市面上没有任何产品可以满足,于是就开源了docker-shim组件(会调用docker接口并满足cri规范)支持CRI接口;
- 2016,RedHat公司基于cri-o(既符合CRI也符合OCI规范)开发框架让rkt容器管理工具支持CRI接口;
- 2017,docker inc公司将containerd从docker engine剥离,并将containerd开源给了CNCF组织,
- containerd底层调用runc,因此该产品是支持OCI提议的;
- containerd组件本身不支持CRI,因此社区大佬们(包含国内外)集体开发cri-containerd组件,最后合并到containerd项目
- 2018 年国内开始流行K8S,各大云厂商已经开始大规模使用K8S集群,
- 阿里云的ACK的SAAS产品
- 腾讯云的TKE的SAAS产品
- 华为云的CCE的SAAS产品
- ucloud的UK8S的SAAS产品
- 亚马逊的Amazon EKS的SAAS产品
- 京东云,百度云等
- 2018年,coreOS公司被Redhat以2.5亿美元收购。
- 2018年10月29日,IBM宣布以340亿美元的价格收购Red Hat。
- 曾经一度,Docker方面的炒作非常猛。
- Docker从Greylock Partners、Insight Partners和红杉资本等大牌投资者处筹资超过2.7亿美元,
- 2018年估值达到最高峰:13.2亿美元。
- 2019年2月,Docker一分为二,将企业业务出售给了云咨询公司Mirantis(对于OpenStack代码贡献量非常大,能排到前3)。
- 2020年,Google宣布K8S将在1.22+版本后弃用docker容器运行时,当时年底发布的最新版是1.20.X;
- 2020年3月11日公布的,当时Docker宣布被云计算软件巨头微软(Microsoft)以 6.7亿美元收购。
- 2021年底 K8S 1.23的RC版本发布;
- 2022年初,K8S 1.24横空出世,直接将docker-shim组件移除,而是使用containerd作为容器运行时;
- 2023年初,K8S 1.27.X发布;
- 2023年3月,K8S 1.23.17 发布了最后一个支持docker-shim的版本。
- docker和Mirantis公司作为合作伙伴,将维护该项目,运维小伙伴如果需要在K8S 1.24及以后的版本使用docker的话,需要单独cri-docker组件。
- 2024年初,K8S 1.30.x版本发布
- 2024年12月,K8S 1.32.x版本发布
- 2025年年初,K8S 1.33.X版本发布
5.Kubernetes集群架构图解
Kubernetes集群架构图解Scheduler:
kube-scheduler根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
Controller Manager:
Kube-controller-manager,处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
Cloud Controller Manager:
用在云平台上的Kube-controller-manager组件。如果我们直接在物理机上部署的话,可以不使用该组件。
API Server:
kube-apiserver,集群的统一入口,各组件协调者,以RESTFUL API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给etcd存储。
Etcd:
分布式键值存储系统,用于保存集群状态元数据信息,比如Pod,Service等对象信息。这个数据库是可以单独拿出来部署,只需要API server可以连接到该分布式数据库集群即可。
kubelet:
可以理解为Master在工作节点上的Agent,管理本机运行容器的生命周期,比如创建容器,Pod挂载数据卷,下载secret,获取容器的节点状态等工作。kubelet将每一个Pod转换成一组容器。
kube-proxy:
在工作节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。换句话说,就是用于负责Pod网络路由,用于对外提供访问的实现。可以找到你关心的项目所在的pod节点。
POD:
用户划分容器的最小单位,一个POD可以存在多个容器。
docker/rocket(rkt,已停止支持):
容器引擎,用于运行容器。
CNI:
Pod跨节点进行网络通信的网络插件。
参考链接:
https://kubernetes.io/zh/docs/concepts/overview/components/
6.Kubernetes的三种网段说明
- K8S各组件通信的网络使用时物理网卡,默认网段: 10.0.0.0/24。
- 跨节点容器实现通信的网段:用户可以自定义,学习环境推荐: 10.100.0.0/16。
但是在自定义网段时,要考虑将来能够分片的IP地址数量,"10.100.0.0/16"最多有65536个IP地址。
如果将来容器运行的数量超过该规模时,应该考虑将网段地址调大,比如"10.0.0.0/8"。
- Service网段:
为容器提供负载均衡和服务发现功能。也是需要一个独立的网段,比如"10.200.0.0/16"最多有65536个IP地址。
同理,如果规模较大时,应该考虑网段分配的问题。
7.kubernetes的部署方式
K8S的部署方式1.官方默认都有两种部署方式: (在生产环境中都可以使用,且都支持高可用环境。咱们学习过程中,建议选择kubeadm。)
- kubeadm部署K8S集群
是官方提供的一种快速部署K8S各组件的部署方式,如果镜像准备就绪的情况下,基于容器的方式部署。
需要提前安装kubelet,docker或者containerd,kubeadm组件。
配置简单,适合新手。新手在镜像准备好的情况下,仅需要2分钟部署完毕。
第三方提供的部署方式:
国内公司:
- 青云科技: kubesphere
底层基于kubeadm快速部署K8S,提供了丰富的图形化管理界面。
- kuboard
底层基于kubeadm快速部署K8S,提供了丰富的图形化管理界面。
- kubeasz
底层基于二进制方式部署,结合ansible的playbook实现的快速部署管理K8S集群。
国外的产品:
- rancher:
和国内的kubesphere很相似,也是K8S发行商,提供了丰富的图形化管理界面。
还基于K8S研发出来了K3S,号称轻量级的K8S。
云厂商:
- 阿里云的ACK的SAAS产品
- 腾讯云的TKE的SAAS产品
- 华为云的CCE的SAAS产品
- ucloud的UK8S的SAAS产品
- 亚马逊的Amazon EKS的SAAS产品
- 京东云,百度云的SAAS产品等。
其他部署方式:
- minikube:
适合在windows部署K8S,适合开发环境搭建的使用。不建议生产环境部署。
- kind:
可以部署多套K8S环境,轻量级的命令行管理工具。
- yum:
不推荐,版本支持较低,默认是1.5.2。
二进制部署和kubeadm部署的区别:
相同点:
都可以部署K8S高可用集群。
不同点:
- 1.部署难度: kubeadm简单.
- 2.部署时间: kubeadm短时间。
- 3.证书管理: 二进制需要手动生成,而kubeadm自建一个10年的CA证书,各组件证书有效期为1年。
- 4.软件安装: kubeadm需要单独安装kubeadm,kubectl和kubelet组件,由kubelet组件启动K8S其他相关Pod,而二进制需要安装除了kubeadm的其他K8S组件。
8.Kubernetes的版本选择
首先,是K8S 1.23.17版本,该版本的第一个rc版本是2021年初,最后一个版本是23年年初结束。
其次,部署K8S 1.24,时间允许的话,我们会基于kubekey的方式部署K8S 1.28版本,而后部署kubesphere来管理多套K8S集群。
9.k8s常用命令
k8s常用命令查看资源
kubectl get
- 基本语法:
kubectl get [资源类型] [选项] - 示例:
kubectl get pods:列出当前命名空间中的所有 Pod。kubectl get pods -o wide:显示 Pod 的详细信息,包括节点等。kubectl get pods -n <namespace> -o wide:查看指定命名空间中的 Pod。kubectl get services:查看服务。kubectl get deployments:查看部署。
kubectl describe
- 基本语法:
kubectl describe [资源类型] [资源名称] - 示例:
kubectl describe pod <pod-name>:查看指定 Pod 的详细信息,包括事件、状态等。kubectl describe deployment <deployment-name>:查看部署的详细信息。
kubectl logs
- 基本语法:
kubectl logs [Pod 名称] [选项] - 示例:
kubectl logs <pod-name>:查看 Pod 的日志。kubectl logs <pod-name> -c <container-name>:查看指定容器的日志(如果 Pod 有多个容器)。kubectl logs <pod-name> --previous:查看之前容器的旧日志。
创建与部署资源
kubectl create
- 基本语法:
kubectl create -f [配置文件路径] - 示例:
kubectl create -f deployment.yaml:根据 deployment.yaml 配置文件创建资源。
kubectl apply
- 基本语法:
kubectl apply -f [配置文件路径] - 示例:
kubectl apply -f deployment.yaml:应用配置文件更新或创建资源。
更新与修改资源
kubectl edit
- 基本语法:
kubectl edit [资源类型] [资源名称] - 示例:
kubectl edit deployment <deployment-name>:在编辑器中修改部署的配置。
kubectl set
- 基本语法:
kubectl set [属性] [资源类型]/[资源名称] [参数] - 示例:
kubectl set image deployment/<deployment-name> <container-name>=<image:tag>:更新部署中容器的镜像。
删除资源
kubectl delete
- 基本语法:
kubectl delete [资源类型] [资源名称]或kubectl delete -f [配置文件路径] - 示例:
kubectl delete pod <pod-name>:删除指定 Pod。kubectl delete -f deployment.yaml:根据配置文件删除资源。kubectl delete namespace <namespace-name>:删除命名空间。
其他实用命令
kubectl exec
- 基本语法:
kubectl exec -it [Pod 名称] -- [命令] - 示例:
kubectl exec -it <pod-name> -- /bin/bash:进入 Pod 中的容器执行命令。
kubectl port-forward
- 基本语法:
kubectl port-forward [资源类型]/[资源名称] [本地端口]:[目标端口] - 示例:
kubectl port-forward service/<service-name> 8080:80:将本地的 8080 端口转发到服务的 80 端口。
kubectl rollout
- 基本语法:
kubectl rollout [操作] [资源类型]/[资源名称] - 示例:
kubectl rollout status deployment/<deployment-name>:查看部署的更新状态。kubectl rollout undo deployment/<deployment-name>:回滚部署到上一个版本。
浙公网安备 33010602011771号