啃k8s之五种控制器类型解析

一:k8s的五种控制器

1.1:k8s的控制器类型

  • Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为

    • 1、deployment:适合无状态的服务部署
    • 2、StatefulSet:适合有状态的服务部署
    • 3、DaemonSet:在每一个node上运行一个pod,新加入的node也同样会自动运行一个pod。例如一些典型的应用场景:
      • 运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph
      • 在每个Node上运行日志收集 daemon,例如 fluentd、 logstash
      • 在每个Node上运行监控 daemon,例如 Prometheus Node Exporter
    • 4、Job:一次性的执行任务
    • 5、Cronjob:周期性的执行任务
  • pod与控制器之间的关系

    • controllers:在集群上管理和运行容器的对象通过label-selector相关联
    • 控制器又被称为工作负载,pod通过控制器实现应用的运维,比如伸缩、升级等

在这里插入图片描述

1.2:Deployment控制器

1、适合部署无状态的应用服务

2、用来管理pod和replicaset

3、具有上线部署、副本设定、滚动更新、回滚等功能

4、提供声明式更新,例如只更新一个新的Image

5、应用场景:web服务

1.2.1:测试deployment控制器

  • 1、编写yaml文件,并创建nginx服务pod资源
'这边之前在yaml那篇博客中创建过,不在赘述'
[root@master test]# kubectl apply -f nginx-deployment.yaml 	'Replicaset 是控制版本,副本数,回滚就是通过此来实现' 
deployment.apps/nginx-deployment created
[root@master test]# kubectl get pods -w
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-78cdb5b557-9jplm   1/1     Running   0          6s
nginx-deployment-78cdb5b557-kwwgn   1/1     Running   0          6s
nginx-deployment-78cdb5b557-xlv97   1/1     Running   0          6s
pod-example                         1/1     Running   0          122m
^C[root@master test]# kubectl get all
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-78cdb5b557-9jplm   1/1     Running   0          16s
pod/nginx-deployment-78cdb5b557-kwwgn   1/1     Running   0          16s
pod/nginx-deployment-78cdb5b557-xlv97   1/1     Running   0          16s
pod/pod-example                         1/1     Running   0          122m

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   5d12h

NAME                               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   3         3         3            3           16s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-78cdb5b557   3         3         3       16s
  • 查看控制器参数:可以使用describe或者edit两种方式
[root@master test]# kubectl describe deploy nginx-deployment
'或者使用edit'
[root@master test]# kubectl edit deploy nginx-deployment
'两种方式都可以查看pod的更详细的信息,包括各种类型的名称、资源、事件等'
    ...省略内容
  strategy:
    rollingUpdate:	'此段解释的是滚动更新机制'
      maxSurge: 25%	'25%指的是pod数量的百分比,最多可以扩容125%'
      maxUnavailable: 25%	'原来pod数量最大销毁数为25%'
    type: RollingUpdate
    ...省略内容
  • 查看控制器的历史版本,滚动更新以此为基础
[root@master test]# kubectl rollout history deploy/nginx-deployment
deployment.extensions/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>	'发现只有一个,说明没有开始滚动更新,否则会保持2个'

1.3:SatefulSet控制器

1、适合部署有状态应用

2、解决Pod的独立生命周期,保持Pod启动顺序和唯一性

3、稳定,唯一的网络标识符,持久存储(例如:etcd配置文件,节点地址发生变化,将无法使用)

4、有序,优雅的部署和扩展、删除和终止(例如:mysql主从关系,先启动主,再启动从)

5、有序,滚动更新

6、应用场景:数据库

1.3.1:有状态服务和有状态服务区别

  • 无状态服务的特点:

    1)deployment 认为所有的pod都是一样的

    2)不用考虑顺序的要求

    3)不用考虑在哪个node节点上运行

    4)可以随意扩容和缩容

  • 有状态服务的特点:

    1)实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper

    2)实例之间不对等的关系,以及依靠外部存储的应用。

1.3.2:常规的service服务和无头服务的区别

  • service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。

  • Headless service 无头服务,不需要cluster-IP,直接绑定具体的Pod的IP,无头服务经常用于statefulset的有状态部署

1.3.3:创建无头服务的service资源和dns资源

  • 由于有状态服务的pod的IP地址是动态的,所以使用无头服务的时候要绑定dns服务

1、创建pod

[root@master test]# kubectl apply -f nginx-test.yaml 
deployment.apps/nginx-deployment created
[root@master test]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
nginx-deployment-d55b94fd-8mhn6   1/1     Running   0          8s
nginx-deployment-d55b94fd-dqszl   1/1     Running   0          8s
nginx-deployment-d55b94fd-fflj4   1/1     Running   0          8s

2、创建service资源

[root@master test]# kubectl create -f nginx-service.yaml 
service/nginx-service created
[root@master test]# kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        5d12h
nginx-service   NodePort    10.0.0.228   <none>        80:38475/TCP   6s

3、在node节点上操作,查看群集间通讯

[root@node1 ~]# systemctl restart flanneld.service 
[root@node1 ~]# systemctl restart docker
[root@node1 ~]# curl 10.0.0.228
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
   
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Ari
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值