Kubernetes,简称,K8s,是,谷歌,开源的,容器编排,系统,也是,现在,容器编排,领域,的,事实标准,很多,公司,都,在用,Kubernetes,来,管理,容器,集群,但是,Kubernetes,比较,复杂,概念,多,学习,曲线,陡峭,很多人,刚,接触,的,时候,会,觉得,很难,很,懵。
我,也是,从,入门,开始,一步步,学习,Kubernetes,的,踩了,很多坑,也,总结了,很多,经验,今天,就来,分享一下,Kubernetes,的,入门,知识,包括,核心概念,架构,组件,常用,操作,等等,尽量,用,通俗易懂的,语言,讲解。
一、什么是Kubernetes
Kubernetes,这个,词,来自,希腊语,意思,是,"舵手",或者,"飞行员",所以,Kubernetes,的,Logo,是,一个,船舵,的,形状,很,形象,因为,Kubernetes,就,像,一个,舵手,驾驶着,集装箱船,管理着,船上的,所有,集装箱(容器)。
Kubernetes,最初,是,谷歌,内部,使用的,容器编排,系统,叫,Borg,谷歌,用,Borg,管理,了,很多年的,容器,集群,积累了,丰富的,经验,2014年,谷歌,把,Borg,的,经验,开源,出来,就是,Kubernetes,2015年,Kubernetes,1.0,正式,发布,从此,Kubernetes,迅速,发展,成为了,容器编排,领域,的,事实标准。
简单,说,Kubernetes,就是,一个,容器,集群,管理,系统,它,能,帮你,自动化地,部署,扩展,管理,容器化的,应用,你,只,需要,告诉,Kubernetes,你,想要,什么,比如,我,想要,10个,Nginx,容器,对外,提供,服务,Kubernetes,就,会,自动,帮你,创建,10个,Nginx,容器,分布,在,集群的,各个,节点,上,自动,管理,它们,的,生命周期,如果,某个,容器,挂了,Kubernetes,会,自动,重启,它,或者,重新,创建,一个,新的,保证,始终,有,10个,容器,在,运行,如果,流量,大了,Kubernetes,还,能,自动,扩展,容器,数量,流量,小了,自动,缩容,非常,智能,非常,方便。
二、为什么需要Kubernetes
有了,Docker,为什么,还,需要,Kubernetes,呢?因为,Docker,只是,解决了,单个,容器,的,打包,和,运行,问题,但是,在,生产环境,我们,需要,管理,的,是,成百上千,个,容器,分布在,多台,服务器,上,这时候,手动,管理,就,非常,麻烦,了,我们,需要,一个,容器编排,系统,来,帮我们,自动化地,管理,这些,容器。
比如,我们,有,一个,Web应用,需要,10个,Nginx,容器,5个,PHP容器,3个,MySQL容器,2个,Redis容器,分布在,10台,服务器,上,手动,管理的话,我们,需要,手动,在,每台,服务器,上,启动,容器,手动,配置,网络,让,容器,之间,能,互相,通信,手动,配置,负载均衡,把,流量,分发到,各个,容器,手动,监控,容器,状态,某个,容器,挂了,手动,重启,手动,扩展,容器,数量,等等,非常,麻烦,非常,容易出错。
而,有了,Kubernetes,这些,都,可以,自动化,我们,只,需要,写,一个,配置文件,告诉,Kubernetes,我们,想要,什么,Kubernetes,就,会,自动,帮我们,完成,所有的,事情,自动,调度,容器,到,合适的,节点,自动,配置,网络,和,负载均衡,自动,监控,容器,状态,自动,故障恢复,自动,扩缩容,等等,大大,简化了,容器,集群,的,管理,提高了,效率,也,提高了,系统,的,可靠性。
三、Kubernetes核心概念
Kubernetes,有,很多,核心概念,理解了,这些,概念,就,理解了,Kubernetes,的,核心思想,下面,介绍,一些,最,常用的,核心概念。
1. Pod
Pod,是,Kubernetes,中,最小的,调度,单元,一个,Pod,里面,可以,包含,一个,或者,多个,容器,这些,容器,共享,网络,和,存储,就,像,在,同一台,机器,上,一样,能,通过,localhost,互相,访问。
一般,我们,一个,Pod,里,只,放,一个,容器,比如,一个,Nginx容器,就是,一个,Pod,但是,有时候,也,会,把,两个,紧密,相关的,容器,放在,同一个,Pod,里,比如,一个,Web应用,容器,和,一个,日志,收集,容器,放在,同一个,Pod,里,共享,存储,日志,收集,容器,读取,Web应用,的,日志,发送到,日志,系统。
Pod,是,短暂的,随时,可能,被,销毁,和,重建,所以,我们,不,应该,把,数据,存在,Pod,里,要,用,持久化,存储,来,保存,数据。
2. Node
Node,就是,Kubernetes,集群,中的,一台,服务器,可以,是,物理机,也,可以,是,虚拟机,每个,Node,上,都,运行着,Kubernetes,的,组件,负责,管理,这个,Node,上的,Pod,Node,分为,Master Node(主节点),和,Worker Node(工作节点),Master Node,负责,管理,整个,集群,Worker Node,负责,运行,Pod,实际,的,工作负载,都,跑在,Worker Node,上。
3. Deployment
Deployment,是,用来,管理,Pod,的,副本,的,控制器,我们,通过,Deployment,来,定义,应用,的,部署,信息,比如,应用,用,什么,镜像,需要,多少,个,副本,更新,策略,等等,Deployment,会,自动,帮我们,创建,和,管理,Pod,保证,指定,数量的,Pod,在,运行,如果,某个,Pod,挂了,Deployment,会,自动,创建,一个,新的,Pod,补充上。
Deployment,还,支持,滚动更新,我们,更新,应用,的,镜像,版本,Deployment,会,自动,用,新的,Pod,逐步,替换,旧的,Pod,保证,应用,不中断,平滑,更新,也,支持,回滚,如果,新版本,有,问题,可以,一键,回滚到,旧版本,非常,方便。
4. Service
Service,是,用来,给,Pod,提供,一个,稳定的,访问,地址,的,因为,Pod,是,短暂的,随时,可能,被,销毁,和,重建,IP地址,也,会,变化,所以,我们,不能,直接,通过,Pod的,IP,来,访问,应用,而,Service,会,给,一组,Pod,提供,一个,稳定的,虚拟IP,和,DNS,名称,访问,Service,的,地址,就,会,自动,负载均衡,到,后面的,各个,Pod,上,而且,不管,Pod,怎么,变化,Service,的,地址,都,不变,非常,稳定。
Service,有,几种,类型:
- ClusterIP:默认,类型,只,在,集群,内部,可访问,集群,外部,访问不到。
- NodePort:在,每个,Node,上,开放,一个,端口,通过,NodeIP:NodePort,就能,访问到,Service,集群,外部,也,能,访问。
- LoadBalancer:使用,云服务商,的,负载均衡器,对外,提供,服务,会,分配,一个,公网IP,一般,在,云上,使用。
- ExternalName:把,Service,映射到,一个,外部,域名,比较,少用。
5. Namespace
Namespace,是,命名空间,用来,在,逻辑上,划分,集群,资源,比如,我们,可以,创建,dev,test,prod,三个,Namespace,分别,用来,部署,开发,测试,生产,环境,的,应用,不同,Namespace,里的,资源,是,隔离的,互不影响,这样,一个,大的,集群,就,能,给,多个,团队,或者,多个,环境,共用,提高,资源,利用率。
6. ConfigMap和Secret
ConfigMap,用来,存储,配置,信息,比如,应用的,配置文件,环境变量,等等,Secret,和,ConfigMap,类似,但是,用来,存储,敏感,信息,比如,密码,密钥,证书,等等,数据,是,加密,存储的,这样,我们,就,不用,把,配置,和,敏感信息,写死,在,镜像,里,或者,代码,里,可以,通过,ConfigMap,和,Secret,注入,到,Pod,里,修改,配置,不用,重新,构建,镜像,非常,方便。
7. Volume和PersistentVolume
Volume,是,卷,用来,给,Pod,提供,持久化,存储,因为,Pod,是,短暂的,容器,里的,数据,会,随着,Pod,销毁,而,丢失,所以,需要,用,Volume,来,挂载,存储,保存,数据,Volume,有,很多,类型,比如,emptyDir,hostPath,NFS,云存储,等等。
PersistentVolume(PV),和,PersistentVolumeClaim(PVC),是,Kubernetes,中,持久化,存储,的,抽象,PV,是,集群,中的,一块,存储,资源,由,管理员,创建,PVC,是,用户,对,存储,的,请求,用户,创建,PVC,声明,需要,多少,存储空间,什么,访问模式,Kubernetes,会,自动,把,合适的,PV,绑定,到,PVC,上,然后,Pod,就,能,挂载,PVC,使用,存储了,这样,用户,不用,关心,底层,存储,的,细节,只,需要,声明,需要,多少,存储,就行,非常,方便。
四、Kubernetes架构
Kubernetes,集群,分为,Master Node(主节点),和,Worker Node(工作节点),Master Node,负责,管理,整个,集群,Worker Node,负责,运行,Pod。
Master Node组件:
- API Server: Kubernetes,的,API,入口,所有的,操作,都,通过,API Server,来,进行,它,负责,接收,请求,认证,授权,校验,然后,把,数据,存到,etcd,里,是,集群,的,大脑。
- etcd: 分布式,键值,存储,用来,保存,集群,的,所有,数据,比如,节点,信息,Pod,信息,配置,等等,是,集群,的,数据库,非常,重要,一定要,做,高可用,和,备份。
- Scheduler: 调度器,负责,把,新创建的,Pod,调度,到,合适的,Worker Node,上,它,会,考虑,资源,需求,亲和性,反亲和性,等等,因素,选择,最合适的,节点。
- Controller Manager: 控制器,管理器,负责,运行,各种,控制器,比如,Node Controller,Deployment Controller,等等,这些,控制器,负责,监控,集群,状态,确保,实际,状态,和,期望,状态,一致,比如,Deployment,控制器,会,确保,Pod,副本数,符合,期望,少了,就,创建,多了,就,删除。
Worker Node组件:
- Kubelet: 每个,Worker Node,上,都,有,一个,Kubelet,负责,管理,这个,节点,上的,Pod,它,从,API Server,获取,分配到,这个,节点,的,Pod,信息,然后,调用,容器,运行时(比如,Docker),创建,和,管理,容器,监控,容器,状态,汇报给,API Server。
- Kube-proxy: 每个,Worker Node,上,都,有,一个,Kube-proxy,负责,管理,这个,节点,上的,网络,规则,实现,Service,的,负载均衡,和,网络,转发,让,访问,Service,的,流量,能,正确,转发到,后面的,Pod。
- 容器运行时: 负责,实际,运行,容器,比如,Docker,containerd,CRI-O,等等,Kubelet,通过,容器运行时,接口(CRI),来,调用,容器运行时,创建,和,管理,容器。
五、常用操作
下面,介绍,一些,Kubernetes,的,常用,操作,用,kubectl,命令行工具。
1. 查看资源
# 查看所有节点
kubectl get nodes
# 查看所有Pod
kubectl get pods
# 查看所有Deployment
kubectl get deployments
# 查看所有Service
kubectl get services
# 查看所有Namespace
kubectl get namespaces
# 查看指定Namespace的Pod
kubectl get pods -n kube-system
# 查看Pod详细信息
kubectl describe pod <pod-name>2. 创建和删除资源
# 通过配置文件创建资源
kubectl apply -f deployment.yaml
# 通过配置文件删除资源
kubectl delete -f deployment.yaml
# 删除指定Pod
kubectl delete pod <pod-name>
# 删除指定Deployment
kubectl delete deployment <deployment-name>3. 查看日志
# 查看Pod日志
kubectl logs <pod-name>
# 实时查看Pod日志
kubectl logs -f <pod-name>
# 查看Pod中指定容器的日志
kubectl logs <pod-name> -c <container-name>4. 进入容器
# 进入Pod中的容器
kubectl exec -it <pod-name> -- /bin/bash5. 扩缩容
# 扩展Deployment副本数
kubectl scale deployment <deployment-name> --replicas=106. 滚动更新和回滚
# 更新镜像
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
# 查看更新状态
kubectl rollout status deployment/<deployment-name>
# 回滚到上一个版本
kubectl rollout undo deployment/<deployment-name>
# 查看更新历史
kubectl rollout history deployment/<deployment-name>六、写在最后
Kubernetes入门:容器编排的事实标准。
Kubernetes,是,现在,容器编排,领域,的,事实标准,也是,云原生,的,核心,技术,掌握了,Kubernetes,能,帮我们,更好地,管理,容器,集群,提高,运维,效率,和,系统,可靠性,虽然,Kubernetes,比较,复杂,概念,多,学习,曲线,陡峭,但是,只要,理解了,核心概念,和,架构,就,能,慢慢,入门,逐步,掌握。
这篇文章,分享了,Kubernetes,的,基本概念,为什么,需要,Kubernetes,核心概念,架构,组件,常用操作,等等,希望,能,帮大家,快速,入门,Kubernetes,理解,容器编排,的,核心思想。
当然,Kubernetes,的,内容,还有,很多,比如,网络,存储,安全,监控,日志,Helm,Operator,等等,以后,有机会,再,详细,分享,大家,也,可以,自己,动手,搭建,一个,Kubernetes,集群,实践,一下,这样,能,更快,地,掌握。
最后,用一句话结尾:
"Kubernetes,是,云原生,时代,的,操作系统,掌握了,它,就,掌握了,未来,的,基础设施。"
祝大家,都能,学好,Kubernetes,工作,顺利!
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录