k8s入门

原创 超级英雄     发表于  2021-08-11 20:28       100

k8s入门

概念

kubernetes集群:

协调一个高可用计算机集群,每个计算机作为独立单元互相连接工作.
Kubernetes以更高效的方式跨集群自动分发和调度应用容器.

一个Kubernetes集群包含两种类型的资源:

  • Master 调度整个集群
  • Nodes 负责运行应用

image

Master 负责管理整个集群.

Node是一个虚拟机或者物理机,他在Kubernetes集群中充当工作机器的角色.每个Node都有Kubelet,它管理Node而且是Node与Maser的通信的代理.
还应该拥有容器工具,例如Docker或者rkt.
Node使用Master暴露的Kubernetes API与Master通信

Deployment 配置

image

Kubernetes Deployment控制器会持续监视实例.

Pod

Pod 是Kubernetes抽象出来的,表示一组一个或者多个应用程序容器(例如:Docker),以及这些容器的一些共享资源.这些资源包括:

  • 共享存储,当做卷
  • 网络,作为唯一的集群ip地址
  • 有关每个容器如何运行的信息,例如容器映像版本或者要使用的特定端口

Pod中的容器共性IP地址和端口,始终位于同一位置并且共同调度,并在同一工作节点上的共享上下文中运行.

Pod是Kubernetes平台上的原子单元.当我们创建Deployment时,该Deployment会在其中创建包含容器的Pod.每个Pod都与调度它的工作节点绑定,
并保持直接终止或者删除.

image

Kubernetes内部运行的Pod运行在一个私有的.隔离的网络上.默认情况下,它们在同一Kubernetes集群内的其他pod和service可见.
但在该网络之外不可见.我们可以使用kubectl,通过api端点与app进行通信

  • tips

Pod 是一组一个或多个应用程序容器(例如 Docker),包括共享存储(卷), IP 地址和有关如何运行它们的信息。

生命周期

起始于Pending,如果至少有一个主要容器正常起订,则进入Running,之后取决于是否有容器以失败状态结束而进入Succeeded或者Failed阶段

Pod在创建时会被赋予一个唯一的ID(UID),并被调度到节点.

image

工作节点

一个pod总是运行在工作节点,工作及诶单是Kubernetes中参与计算的机器,可以使虚拟机或者物理计算级.每个工作节点you主节点管理.
工作节点可以有多个pod.Kubernetes主节点会自动处理在集群中的工作节点上pod.主节点的自动调度考量了每个工作节点上的可用资源.

每个Kubernetes工作节点至少运行:

  • kubelet,负责Kubernetes主节点和工作节点之间通信的过程;它管理Pod和机器上运行的容器.
  • 容器运行室(如Docker)负责从仓库中提取容器镜像,解压缩容器以及运行应用程序.

image

  • tips

如果它们紧耦合并且需要共享磁盘等资源,这些容器应在一个 Pod 中编排。

工作节点是 Kubernetes 中的负责计算的机器,可能是VM或物理计算机,具体取决于群集。多个 Pod 可以在一个工作节点上运行。

Service

Kubernetes Service是一种抽象的概念,它蒂尼了Pod的逻辑集和访问Pod的协议.Service使从属Pod之间的松耦合成为可能.
和其他Kubernetes对象一样,Service使用YAML或者JSON来定义.Service下的一组Pod通常由LableSelector来标记.

尽管每个Pod都有一个唯一的IP地址,但是如果没有Service,这些IP不会暴露在集群外部.Serice允许app接收流量.Servcie也可以用在ServiceSpec标记type方式暴露

  • ClusterIP(默认)-在集群的内部IP上公开Service.
  • NodePort-使用NAT在集群中每个选定Node的相同端口上公开Service.使用<NodeIP>:<NodePort>从集群外部访问Service.是ClusterIP的超集
  • LoadBalancer-在当前云中创建一个外部负载均衡器,并为Service分配一个固定的外部IP.是NodePort的超集
  • ExternalName-通过返回带有该名称的CNAME记录,使用任意名称(由spec中的externalName指定)公开Service.
    image
    image

  • tips

Kubernetes 的 Service 是一个抽象层,它定义了一组 Pod 的逻辑集,并为这些 Pod 支持外部流量暴露、负载平衡和服务发现。。
你也可以在创建 Deployment 的同时用 --expose创建一个 Service 。

运行多个实例

image
image

  • tips

在运行 kubectl run 命令时,你可以通过设置 --replicas 参数来设置 Deployment 的副本数。

扩缩是通过改变 Deployment 中的副本数量来实现的。

更新应用

滚动更新 允许通过使用新的实例逐步更新 Pod 实例,零停机进行 Deployment 更新。新的 Pod 将在具有可用资源的节点上进行调度
image
image
image
image

  • tips

滚动更新允许通过使用新的实例逐步更新 Pod 实例从而实现 Deployments 更新,停机时间为零。
如果 Deployment 是公开的,则服务将仅在更新期间对可用的 pod 进行负载均衡。

常用命令

  • kubelet get 列出资源
  • kubelet describe 显示有关资源的详细信息
  • kubelet logs 打印 pod 和其中容器的日志
  • kubelet exec 在 pod 中的容器上执行命令
  • 查看集群事件

kubectl get events

  • 查看kubectl配置

kubectl config view

  • 查看集群信息

kubectl cluster-info

  • 查看集群中的节点

kubectl get nodes

  • 创建一个app

kubectl create deployment {name} --image={full_image_url}

  • 查看deploy

kubectl get deployment

  • 开启代理

kubectl proxy

  • 获取pod信息

kubectl get pods
kubectl get pods -o wide

  • 获取service信息

kubectl describe service/{service_name}

  • 创建带有NodePort的service

kubectl expose deployment/{service_name} --type="NodePort" --port {prot}

  • 查看deployment信息

kubectl deployment

  • 查看对应lable的pods

kubectl get pods -l {labels}

  • 查看对应lable的services

kubectl get services -l {labels}

  • 创建Labels

kubectl label pods {pod_name} {label}
kubectl label pods {pod_name} version=v1

  • 查看已经创建的ReplicaSet

cubectl get rs

  • 扩展服务scale

kubectl scale deployments/{service_name} --replicas=4

  • 更新image

kubectl set image deployment/{service_name} {image_name}={full_image_name}:{image_version}

  • 确认pod更新

kubectl rollout status deployment/{pod_name}

  • 取消pod更新

kubectl rollout undo deployment/{pod_name}

  • 清理相关

kubectl delete service {service_name}
kubectl delete deployment {deploment_name}

  • 插件相关

kubectl addons list

kubectl addons enable {addnos_name}