kubernetes基础概念整理发布

 

1、拓扑图

kubernetes基础概念整理发布

 

2、kubernetes概念:

   是谷歌开源的生产级容器编排系统,是谷歌多年大规模容器管理技术borg的开源版本

   -基于容器的应用部署,维护和滚动升级

   -负载均衡和服务发现

   -跨机器和夸地区的集群调度

   -自动伸缩

   -无状态服务和有状态服务

   -广泛的volome支持

   -插件机制保证扩展性

3、容器

概念:

一系列隔离的进程,提供了一中轻量级操作系统层面的虚拟化技术

优势:

        每个容器都有自己de文件系统、CPU、内存、进程空间等

              与传统的VM比具有启动快。性能消耗少,轻量级等优点

4、容器编排

容器编排:用于自动部署,扩展,管理容器化应用程序的开源系统

   容器编排:以容器为基本对象进行管理,协同容器共同实现应用功能

   容器编排系统主要功能:容器调度,资源管理,服务管理

5、集群插件

5.1 master:

    api server 对外服务交互的接口

       scheduler  资源调度,分配容器该运行到那个服务器上

       controller manager  监控docker服务的运行情况,并自动维护

5.2 node:

    container runtime  容器引擎

       kubelet  运行在node节点上的agent,处理master节点下发到本节点的任务,管理pod和其中的容器,定期向master汇报节点资源的使用情况

       kube-proxy 运行在node节点上的agent,实现service的抽象,为一组pod抽象的服务(service)提供统一接口,并提供负载均衡和服务发现的功能

      

etcd:coreos开发并开源,基于raft协议的分布式的一致性kv存储,类似于zookeeper,在k8s中用作分布式kv存储系统,用于保存集群所有的网络配置和对象的状态信息

zookeeper 分布式存储的一个中间件

6、kubernetes调用流程:

   1、用户通过kubectl进行操作,例如:部署新的应用

   2、api server请求,并将其储存到etcd中

   3、watcher和controller检测到资源状态的变化,并进行操作

   4、replicaset watcher和controller检测到新的app,创建新的pod达到期望的实例个数

   5、schedule将新的pod分配到kubectl

   6、kubelet检测到pods,并通过容器运行时部署他们

   7、kube-proxy管理pods的网络,包括服务发现,负载均衡

7、项目迁移到k8s平台的具体流程:

  制作镜像--控制器管理pod--暴露应用--对外发布应用--日志、监控


8、Pod概念

最小部署单元,一组容器的组合,一个pod中的容器共享网络命名空间,pod是短暂的。

9、Controllers概念

Label :标签,附加到某个资源上,用于关联对象,查询和筛选

Namespace:命名空间,将对象逻辑上隔离

Replicset:确保预期的pod副本数量

Deployment:无状态应用部署

Satefulset:有状态应用部署

Daemonset:确保所有的node运行在同一个pod

Job:一次性任务

Cronjob:定时任务

10、Service概念(服务发现和负载均衡)

找到该服务的pod,并定义一组负载均衡的策略

 

kubernetes基础概念整理发布

10.1 创建基础yaml文件

kubernetes基础概念整理发布

 

10.2 创建deployment,指定名称空间

kubectl create deployment java-demo --image=lizhenliang/java-demo --namespace=kube-system  --dry-run -o yaml >deployment.yaml

10.3 创建service,手动添加namespace

kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run >service.yaml

 

kubernetes基础概念整理发布

10.4 结果图:

kubernetes基础概念整理发布

 

11、导出现成的yaml文件

kubectl get pods -n infra

kubectl get pods jenkins-754b546fd6-s5tpl  -n infra -o yaml

kubectl get pods jenkins-754b546fd6-s5tpl  -n infra -o yaml > jenkins.yaml

12、pod

12.1 概念

最小的部署单元

一个pod中的容器共享网络命名空间与存储

Pod是短暂的

12.2 Pod存在的意义

Pod为亲密性应用而存在

亲密性应用场景:

  1. 两个应用之间发生文件交互
  2. 两个应用需要通过127.0.0.1或者socket通信
  3. 两个应用需要发生频发的调用

 

12.3 Pod实现机制

共享网络

 应用在同一个pod中,可通过127.0.0.1或者socket通信

共享存储

    同一个pod中两个容器有一个共享目录,用作两个容器共用

12.4 Pod容器分类与设计

Infrastructure container:基础容器,维护整个pod网络空间

Initcontainers: 初始化容器,先于业务容器开始执行

Containers:业务容器,并行执行

12.5 Pod Template常用功能字段解析

变量

kubernetes基础概念整理发布

 

拉取镜像

kubernetes基础概念整理发布

 

资源限制

kubernetes基础概念整理发布

 

健康检查

 

kubernetes基础概念整理发布

 

13、Deployment控制器

13.1 Pod与controllers的关系

Controllers:在集群上管理和运行容器的对象

通过label-selector(标签)相关联

Pod通过控制器实现应用的运维,如伸缩,滚动升级等

13.2 Deployment功能与应用场景

部署无状态应用

管理pod和replicaset(单一的控制器)

具有上线部署,副本设定,滚动升级,回滚等功能

提供声明式更新,例如只更新一个新的image

应用场景:web服务,微服务

13.3 Yaml字段解析

kubernetes基础概念整理发布

 

13.4 使用deployment部署无状态应用

建议使用yaml文件,添加--dry-run -o yaml

kubernetes基础概念整理发布

13.5 升级与回滚

kubernetes基础概念整理发布

Clusterip  集群内部访问,nodeport集群外部访问,loadbalancer 配置腾讯云访问,externalname 配置集群外部服务名,使集群内部访问

13.6 在线修改pods容器的yaml文件

kubernetes基础概念整理发布

13.7 应用弹性伸缩

kubernetes基础概念整理发布

14、Service统一入口访问应用

14.1 Service存在的意义

 防止pod失联(服务发现)

定义一组pod的访问策略(负载均衡)

支持ClusterIP,NodePort以及loadmalancer三种类型

14.2 Pod与service的关系

通过lbel-selector相关联

通过service实现pod的负载均衡(TCP/UDP 4层)

kubernetes基础概念整理发布

14.3 Service几种类型

Service默认采用iptables(建议采用ipvs,以为支持多种轮询算法)实现负载均衡策略

kubernetes基础概念整理发布

kubernetes基础概念整理发布

ClusterIP:分配内部集群ip地址,只能在集群内部访问(同namespace内的pod),默认ServiceType

ClusterIP模式的service为你提供的,就是一个pod的稳定的IP地址,即VIP

 

NodePort:分配一个内部集群ip地址,并在每个节点启用一个端口来暴露服务,可以再集群外部访问。访问地址:<NodeIP>:<NodePort>

 

Loadbalancer:分配一个内部集群ip地址,并在每个节点上启用一个端口来暴露服务。除此之外,kubernetes会请求底层云平台上的负载均衡器,将每个node([NodePort]:[NodePort])作为后端添加进去。

15、Ingress对外暴露应用

15.1 Pod与ingress的关系

通过service关联pod

基于域名访问

通过ingress controller实现pod的负载均衡

支持tcp/udp 4层和http 7层

kubernetes基础概念整理发布

15.2 Ingress controller

域名直接访问pod里边的控制器,基于七层协议。基于端口访问只能通过四层协议。

kubernetes基础概念整理发布

15.3 Ingress

kubernetes基础概念整理发布

15.4 查看某个名称空间的访问域名

kubectl get ingress -n infra

kubernetes基础概念整理发布

15.5 检查集群节点数

[[email protected] ~]# kubectl get ep -n test

kubernetes基础概念整理发布

16、Pod工作流程

kubernetes基础概念整理发布

 

 

 

注:以上概念问题是我在学习中记录的,如果哪里有问题,请联系我,我会及时更新,避免误导别人哈,谢谢!