K8s基本概念与基本功能使用

概念与基本功能使用

  • Kubernetes的整体架构
    • master节点
      • API Server(API服务器)
      • Scheduler(调度器)
      • Controller
      • Etcd
    • node节点
      • Kubelet
      • kube proxy
  • 基本功能使用
    • 部署应用
    • 副本集伸缩
    • 滚动更新

Kubernetes的整体架构

K8s基本概念与基本功能使用_第1张图片

Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,以及包括客户端命令行工具kubectl和其它附加项。

  • Master Node:作为控制节点,对集群进行调度管理;Master Node由API Server、Scheduler、Cluster
    State Store和Controller-Manger Server所组成;
  • Worker Node:作为真正的工作节点,运行业务应用的容器;Worker Node包含kubelet、kube
    proxy和Container Runtime;
  • kubectl:用于通过命令行与API Server进行交互,而对Kubernetes进行操作,实现在集群中进行各种资源的增删改查等操作;
  • Add-on:是对Kubernetes核心功能的扩展,例如增加网络和网络策略等能力。

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

master节点

K8s基本概念与基本功能使用_第2张图片

API Server(API服务器)

API Server主要用来处理REST的操作,确保它们生效,并执行相关业务逻辑,以及更新etcd(或者其他存储)中的相关对象。API Server是所有REST命令的入口,它的相关结果状态将被保存在etcd(或其他存储)中。API Server的基本功能包括:

  • REST语义,监控,持久化和一致性保证,API 版本控制,放弃和生效
  • 内置准入控制语义,同步准入控制钩子,以及异步资源初始化
  • API注册和发现

另外,API Server也作为集群的网关。默认情况,客户端通过API Server对集群进行访问,客户端需要通过认证,并使用API Server作为访问Node和Pod(以及service)的堡垒和代理/通道。

Scheduler(调度器)

scheduler组件为容器自动选择运行的主机。依据请求资源的可用性,服务请求的质量等约束条件,scheduler监控未绑定的pod,并将其绑定至特定的node节点。Kubernetes也支持用户自己提供的调度器,Scheduler负责根据调度策略自动将Pod部署到合适Node中,调度策略分为预选策略和优选策略,Pod的整个调度过程分为两步:

  • 预选Node:遍历集群中所有的Node,按照具体的预选策略筛选出符合要求的Node列表。如没有Node符合预选策略规则,该Pod就会被挂起,直到集群中出现符合要求的Node。
  • 优选Node:预选Node列表的基础上,按照优选策略为待选的Node进行打分和排序,从中获取最优Node。

Controller

Pod控制器,k8s通过控制器来管理Pod资源,控制器包括ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等,每种controller都有对应的功能(比如Deployment是最常见的无状态应用的控制器,它支持应用的扩缩容、滚动更新等操作,为容器化应用赋予了极具弹性的功能);

Etcd

etcd是一个简单的、分布式的、一致的key-value存储,主要被用来共享配置和服务发现。etcd提供了一个CRUD操作的REST API,以及提供了作为注册的接口,以监控指定的Node。集群的所有状态都存储在etcd实例中,并具有监控的能力,因此当etcd中的信息发生变化时,就能够快速的通知集群中相关的组件。

node节点

K8s基本概念与基本功能使用_第3张图片

Kubelet

Kubelet是Kubernetes中最主要的控制器,它是Pod和Node API的主要实现者,Kubelet负责驱动容器执行层。在Kubernetes中,应用容器彼此是隔离的,并且与运行其的主机也是隔离的,这是对应用进行独立解耦管理的关键点

kube proxy

在Kubernetes中,kube proxy负责为Pod创建代理服务;引到访问至服务;并实现服务到Pod的路由和转发,以及通过应用的负载均衡。

基本功能使用

部署应用

kubectl run mytest --image=nginx --port=80
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/mytest created

##kubectl run 部署应用
##mytest 命名
##--image docker镜像
##--port 应用对外服务端口

查看当前pod

kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
mytest-cd84df8db-g5t8f   1/1     Running   0          2m53s

kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
mytest-cd84df8db-g5t8f   1/1     Running   0          3m58s   10.244.1.7   node1              

访问应用

curl 10.244.1.7
Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

注:此时应用只能内部访问

外部访问应用

kubectl expose deployment mytest --type=NodePort --port=80
service/mytest exposed

##–type=NodePort:使用结点+端口方式访问服务

查看服务端口

kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1              443/TCP        3d22h
mytest       NodePort    10.96.95.124           80:30392/TCP   2m3s

访问服务

K8s基本概念与基本功能使用_第4张图片

副本集伸缩

默认情况下应用只会运行一个副本,可以通过 kubectl get deployments查看副本数。

kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
mytest   1/1     1            1           12m

将副本集增加到3个

kubectl scale deployment mytest --replicas=3
deployment.apps/mytest scaled

查看pod

kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
mytest-cd84df8db-4cqvk   1/1     Running   0          35s
mytest-cd84df8db-g5t8f   1/1     Running   0          13m
mytest-cd84df8db-pz9k9   1/1     Running   0          35s

将副本集缩减到2个

kubectl scale deployment mytest --replicas=2

查看pod

 kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
mytest-cd84df8db-g5t8f   1/1     Running   0          22m
mytest-cd84df8db-pz9k9   1/1     Running   0          9m26s

滚动更新

将当前应用nginx更改成为httpd

kubectl set image deployments/mytest mytest=httpd
deployment.apps/mytest image updated

nginx的pod会逐个被删除再更新成为httpd

访问服务

curl http://192.168.1.10:30392/

It works!

再将更新完的httpd回滚到nginx

 kubectl rollout undo deployment mytest

查看pod

kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
mytest-6fcc9dd56b-4pfl9   1/1     Running             0          2m39s
mytest-6fcc9dd56b-fdz95   1/1     Running             0          2m41s
mytest-cd84df8db-w5cmc    0/1     ContainerCreating   0          1s

kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
mytest-6fcc9dd56b-4pfl9   1/1     Running             0          2m59s
mytest-6fcc9dd56b-fdz95   0/1     Terminating         0          3m1s
mytest-cd84df8db-w5cmc    1/1     Running             0          21s
mytest-cd84df8db-z2rtx    0/1     ContainerCreating   0          4s

kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
mytest-cd84df8db-w5cmc   1/1     Running   0          58s
mytest-cd84df8db-z2rtx   1/1     Running   0          41s

你可能感兴趣的:(K8s基本概念与基本功能使用)