kubernetes

Kubernetes,也称为 K8s,是一个用于管理跨多个主机的容器化应用程序的开源系统。它提供了应用程序的部署、维护和扩展的基本机制。 Kubernetes 建立在 Google 十五年使用名为 Borg 的系统大规模运行生产工作负载的经验之上,并结合了社区的最佳想法和实践。

kubernetes 版本

Kubernetes 项目维护最近三个次要版本(1.28、1.27、 1.26)的发布分支。 Kubernetes 1.19 和更新版本获得大约 1 年的补丁支持。 Kubernetes 1.18 及更早版本获得了大约 9 个月的补丁支持周期。 Kubernetes 版本表示为 x.y.z, 其中 x 是主要版本,y 是次要版本,z 是补丁版本,遵循语义版本控制术语。

k8s是什么?

Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。为了简写将k和s中间的8个字母缩写,称它为k8s

k8s架构的组成

K8S集群至少需要一个主节点(Master)和多个计算节点(Node)

  • 主节点主要用于暴露API,调度部署和节点的管理
    • Kubectl:客户端命令行工具,作为整个K8s集群的操作入口
    • Api Server:在K8s架构中承担的是“桥梁”的角色,作为资源操作的唯一入口,它提供了认证、授权、访问控制、API注册和发现等机制。
    • Controller-manager:负责维护群集的状态,比如故障检测、自动扩展、滚动更新等
    • Scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的node节点上
    • Etcd:担任数据中心的角色,保存了整个群集的状态
  • 计算节点是k8s集群中真正工作的节点。
    • Kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理,一般运行在所有的节点,是Node节点的代理
    • Kube-proxy:Service在逻辑上代表了后端的多个pod。
    • container-runtime:是负责管理运行容器的软件,比如docker
    • Pod:是k8s集群里面最小的单位。

k8s 调度过程

k8s

k8s 部署配置文件编写

  1. 部署一个应用
apiVersion: apps/v1	#与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment	#该配置的类型,我们使用的是 Deployment
metadata:	        #译名为元数据,即 Deployment 的一些基本属性和信息
  name: nginx-deployment	#Deployment 的名称
  labels:	    #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
    app: nginx	#为该Deployment设置key为app,value为nginx的标签
spec:	        #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
  replicas: 1	#使用该Deployment创建一个应用程序实例
  selector:	    #标签选择器,与上面的标签共同作用,目前不需要理解
    matchLabels: #选择包含标签app:nginx的资源
      app: nginx
  template:	    #这是选择或创建的Pod的模板
    metadata:	#Pod的元数据
      labels:	#Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec:	    #期望Pod实现的功能(即在pod中部署)
      containers:	#生成container,与docker中的container是同一种
      - name: nginx	#container的名称
        image: nginx:1.7.9	#使用镜像nginx:1.7.9创建container,该container默认80端口可访问

运行配置文件

kubectl apply -f nginx.yaml

  1. 暴露应用
apiVersion: v1
kind: Service
metadata:
  name: nginx-service	#Service 的名称
  labels:     	#Service 自己的标签
    app: nginx	#为该 Service 设置 key 为 app,value 为 nginx 的标签
spec:	    #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
  selector:	    #标签选择器
    app: nginx	#选择包含标签 app:nginx 的 Pod
  ports:
  - name: nginx-port	#端口的名字
    protocol: TCP	    #协议类型 TCP/UDP
    port: 80	        #集群内的其他容器组可通过 80 端口访问 Service
    nodePort: 32600   #通过任意节点的 32600 端口访问 Service
    targetPort: 80	#将请求转发到匹配 Pod 的 80 端口
  type: NodePort	#Serive的类型,ClusterIP/NodePort/LoaderBalancer

kubectl apply -f nginx-service.yaml

Last Updated:
Contributors: jobcher