kubernetes看这一篇就够了


先吹一波:

  • 包括多层次的安全防护和准入机制
  • 多租户应用支撑能力
  • 透明的服务注册和服务发现机制
  • 内建智能负载均衡器
  • 强大的故障发现和自我修复能力
  • 服务滚动升级和在线扩容能力
  • 可扩展的资源自动调度机制
  • 多粒度的资源管理能力

一、安装

二、概念

三、架构

在这里插入图片描述

  • Kubernetes设计理念和功能其实就是一个类似Linux的分层架构
  • 一个全新的基于容器技术的分布式架构领先方案
  • 为生产环境而设计的容器调度管理系统,
  • 对于负载均衡、服务发现、高可用、滚动升级、自动伸缩等容器云平台的功能要求有原生支持

原由:

  • 最基本的一个理由就是:IT 是新技术驱动行业
  • 全面拥抱微服务架构
  • 超强的横向扩容能力

Kubernetes主要由以下几个核心组件组成:
在这里插入图片描述

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

除了核心组件,还有一些推荐的Add-ons

  • kube-dns 负责为整个集群提供DNS服务
  • Ingress Controller 为服务提供外网入口
  • Heapster 提供资源监控
  • Dashboard 提供GUI
  • Federation 提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

网络模型

  • Pod内容器通信 <-> Pod间通信 <-> Pod和Service通信 <-> 集群外部流量和Service通信
    要求,所有Pod对象都位于同一平面网络中(不经NAT),且可使用Pod自身地址直接通信
  • Pod IP:由网络插件负责管理和配置,实际存在于某个网卡,可为虚拟网卡
  • Cluster IP:由集群负责配置和管理,即Service的IP,是虚拟IP地址,不存在于任何网络接口上,由kube-proxy借助iptables或ipvs重定向到本地端口,再调度至后端Pod对象
  • 节点网络:真实网络,先于集群配置,集群不能管理
    Pod网络:虚拟网络,配置于Pod中容器网络接口上,借助插件实现,插件可独立部署于集群外或托管于集群上
    Service网络:虚拟网络,在集群创建时予以指定,各Service地址在创建时动态配置
  • k8s pod的4种网络模式最佳实战
    在这里插入图片描述
  • Pod:由回环节口lo直接通信
    每个Pod都分配了唯一的IP地址,称之为PodIP,一个Pod里的多个容器共享PodIP地址。要求底层网络支持集群内任意两个Pod之间的直接通信,通常采用虚拟二层网络技术来实现(Flannel)。
  • VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网
    它是一种 overlay 技术,通过三层的网络来搭建虚拟的二层网络。
    在这里插入图片描述
  • ingress 七层代理
    实际上这个ingress配置文件 会被翻译成nginx.conf

四、资源抽象

1、Pod

  • 为最小调度单元,同一Pod中容器共享网络名称空间和存储资源,由回环节口lo直接通信

2、资源标签

  • Label是将资源进行分类的标识符,是key/values数据,为指定对象提供辨识性属性

3、标签选择器

  • Selector根据Label来过滤符合条件的资源对象,使用标签对资源对象进行分类,使用标签选择器挑选出它们

4、Pod管制器

  • 通常不直接部署及管理Pod,而是借助控制器Controller进行管理
    包括 ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等
- 长期伺服型(long-running)              - 控制器为Deployment
- 批处理型(batch)			            - 控制器为Job
- 节点后台支撑型(node-daemon)	 	    - 控制器为DaemonSet
- 有状态应用型(stateful application)     - 控制器为PetSet

Pod管理器:

  • 复制控制器(Replication Controller,RC)是K8s集群中最早的保证Pod高可用的API对象
  • 副本集(Replica Set,RS)对象一般不单独使用,而是作为Deployment的理想状态参数使用
  • 部署(Deployment)表示用户对K8s集群的一次更新操作,我认为目前最常用的
  • RC、RS和Deployment只是保证了支撑服务的微服务Pod的数量,但是没有解决如何访问这些服务的问题
  • 客户端需要访问的服务就是Service对象,service(服务)是分布式集群架构的核心,关键特征:
    • 拥有一个唯一指定的名字(比如mysql-service)
    • 拥有一个虚拟IP(Cluster IP、service IP或VIP)和端口号
    • 能够提供某种远程服务能力
    • 被映射到了提供这种服务能力的一组容器应用上

5、服务资源Service

  • Service是Pod上的资源抽像,将标签选择器选定的一组Pod定义统一固定访问入口(IP及DNS名称),到达Service的请求将负载均衡到后端的各Pod
    Service也可将集群外部流量引入到集群中

6、存储卷

  • Volume分为临时卷、本地卷和网络卷,临时卷和本地卷位于Node本地,常用于数据缓存

7、Name和Namespace

  • 同一Navespace下同一类型资源对象的Name必须唯一,逻辑分组,默认名称空间是default

8、注解Annotation

  • 附加在对象上的键值类型数据,拥有更大的数据容量,不能用于标识和选择对象,主要用于方便工具或用户阅读和查找

9、Ingress

  • 开放给外部访问

10、声明式思考

  • K8s中所有的配置都是通过API对象的spec去设置的,也就是用户通过配置系统的理想状态来改变系统,

  • Pod是K8s集群中所有业务类型的基础,可以看作运行在K8s集群中的小机器人,不同类型的业务就需要不同类型的小机器人去执行。

  • 典型的后台支撑型服务包括,存储,日志和监控等在每个节点上支持K8s集群运行的服务

五、kubectl 常用

命令
在这里插入图片描述
1、kubectl get po --查看微服务

2、kubectl get ns --查看命名空间

3、kubectl get cm–查看配置文件

4、kubectl get po -n ns名称–查看某一命名空间下的微服务

5、kubectl get pv --查看持久卷

6、kubectl get pvc --查看持久卷申请

7、kubectl logs -f 微服–查看微服日志

8、kubectl get cs–检查k8s集群是否健康

9、kubectl cluster -info --查看集群信息

10、kubectl get po -o wide–查看微服具体运行在哪个从节点node上。

11、kubectk get po -o yaml --查看pod的详细信息

12、kubectl get po -o json --以json的格式输出pod 信息

13、kubectl exec -it pod名 -n /bin/bash --进入pod

14、kubectl create 文件名.yaml --重建资源

15、kubectl apply -f 文件名.yaml --是配置文件资源重新生效

16、kubectl delete po -n --删除pod,让集群自动分配重启

17、删除各种资源

  • kubectl delete -f 文件名

  • kubectl delete pod pod名

  • kubectl delete rc rc名

  • kubectl delete service service名

  • kubectl delete pod --all

18、kubectl -n ns run gaogetest --images=镜像名称 --replicas=1, 部署pod在ns上

六、应用

1、在k8s进行管理应用(生命周期)的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用
2、kube-controler-manager 中的 node controller 模块 通过 apiservice 提供的监听接口,实时监控 node 机的状态信息; 当某个node 机器宕机,controller-manager 就会及时排除故障并自动修复。
3、node节点机上的kubelet进程每隔一段时间周期就会调用一次apiservice接口报告自身状态,apiservice接口接受到这些信息后将节点状态更新到ectd中。
kubelet也通过apiservice的监听接口监听pod信息,如果监控到新的pod副本被调度绑定到本节点,则执行pod对应的容器的创建和启动,如果监听到pod对象被删除,则删除本节点对应的pod容器。
在这里插入图片描述

七、卸载清理

kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum remove kube*
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值