Pod资源
Pod就是共享Network名称空间,IPC名称空间,UTS名称空间的一组容器。在Pod的底层还存在一个基础设施容器Pause。
Pause的主要作用是用来提供存储卷和名称空间。
Pod的生命周期123456root@k8s-master01:~# kubectl get podsNAME READY STATUS RESTARTS AGEdemoapp-5f7d8f9847-jrfm6 1/1 Running 0 40hdemoapp-5f7d8f9847-r7h7b 1/1 Running 0 37hdemoapp-5f7d8f9847-v7ft8 1/1 Running 0 40hmypod 1/1 Running 0 18h
在使用kubectl get pods时,其中的status信息,又称为pod的相位。一个pod的相位共有5种相位:
R ...
Pod的创建和删除过程
Pod创建过程
用户使用kubectl创建一个pod,将请求发送给API Server,API Server将其存入etcd
Scheduler会看到Pod未被处于调度状态,其会为Pod选择一个Node并建立绑定关系,然后写入etcd.
Node上的kubelet监视到API Server上与自己有关的Pod创建了,于是kubelet拿到配置并运行容器,容器运行完毕后将其存回到API Server,由API server写入到etcd中。
能与etcd交互的只有API Server,所有组件彼此间协作都是通过API Server来完成的。
Pod删除过程
CRD资源
CRD: CustomResourceDefinition。自定义资源类型。
k8s有个特性将以前所使用的各种IT设施进行抽象,使用k8s自身的API向外进行提供。
目前,扩展Kubernetes API的常用方式有3种:
使用CRD(CustomResourceDefinitions)自定义资源类型
开发自定义的API Server并聚合至主API Server
定制扩展API Server源码
这其中,CRD最为易用但限制颇多,自定义API Server更富于弹性但代码工作量偏大,而仅在必须添加新的核心类型才能确保专用的Kubernetes集群功能正常,才应该定制系统源码。
Node资源
Nodes资源在k8s中是集群级别的资源
1234567# 获取集群中的Nodes信息root@k8s-master01:~# kubectl get nodesNAME STATUS ROLES AGE VERSIONk8s-master01 Ready control-plane,master 38h v1.21.1k8s-node01 Ready <none> 38h v1.21.1k8s-node02 Ready <none> 38h v1.21.1k8s-node03 Ready <none> 38h v1.21.1
查看指定node节点的详细信息
123root@k8s-master01:~# kubectl get nodes k8s-node01 -o wideNAME STATUS R ...
Namespace资源
获取名称空间1234567root@k8s-master01:~# kubectl get nsNAME STATUS AGEdefault Active 24hkube-node-lease Active 24hkube-public Active 24hkube-system Active 24hlonghorn-system Active 8h
查看名称空间的资源清单123456789101112131415root@k8s-master01:~# kubectl get ns default -o yamlapiVersion: v1kind: Namespacemetadata: creationTimestamp: "2021-06-28T10:53:44Z" labels: kubernetes.io/metadata.name: default name: default resourceVersion: "209" ...
Kubernetes标签和标签选择器
标签标签中的键名称通常由“键前缀”和“键名”组成,其格式形如“KEY_PREFIX/KEY_NAME”,键前缀为可选部分。键名至多能使用63个字符,支持字母、数字、连接号(-)、下划线(_)、点号(.)等字符,且只能以字母或数字开头。而键前缀必须为DNS子域名格式,且不能超过253个字符。省略键前缀时,键将被视为用户的私有数据。那些由Kubernetes系统组件或第三方组件自动为用户资源添加的键必须使用键前缀,kubernetes.io/和k8s.io/前缀预留给了kubernetes的核心组件使用,例如Node对象上常用的kubernetes.io/os、kubernetes.io/arch和kubernetes.io/hostname等。
标签的键值必须不能多于63个字符,它要么为空,要么是以字母或数字开头及结尾,且中间仅使用了字母、数字、连接号(-)、下划线(_)或点号(.)等字符的数据。
添加删除标签命令行下添加删除标签
123456789101112131415161718# Update pod 'foo' with the label 'un ...
Kubernetes基本概念
Podk8s的最终目标就是以应用为中心,来组织和围绕如何更好的以容器化的方式运行应用。而在k8s上运行容器的做小的原子单元是由k8s抽象出的pod。
Pod的含义是豌豆荚的意思,它意味着一个豆荚内存在着好几个豌豆。而在k8s中pod则代表着一组关联度非常密切的容器。如主容器为应用容器,而辅助容器为日志收集的agent之类的容器。这种辅助容器可以称之为容器的SideCar。
在k8s中pod内的容器组合有以下几种:
SideCar
Adapter
Ambassador
在k8s的容器应用中,容器之间是存在关系的。这种关系是需要由容器编排系统进行管理,这种关系分为亲密和非紧密。
亲密:k8s会将其放入几个pod内实现同进退。这些容器中的Network、IPC、UTS是共享的。并且共享一组存储卷。所以主容器会挂载一组存储卷,将所有数据写入存储卷中,SideCar也挂载同一组存储卷,所以主容器所写的内容都会被sidecar所收集。容器间通信使用lo接口即可。
非紧密:容器各自是各自的Pod。通信需要借助网络插件。
pod-to-pod:网络插件实现
pod-to-service:ipv ...
Kubernetes集群部署
k8s基本部署要求
每个节点的时间必须同步。
要求各节点的防火墙必须关闭
禁用swap设备,k8s要求必须关闭swap,除非安装时强行忽略此错误
确保所有节点的ID为唯一的。
准备工作一个Master节点,三个Worker节点.
HostName
IP
k8s-master01
172.16.11.71
k8s-node01
172.16.11.81
k8s-node02
172.16.11.82
k8s-node03
172.16.11.83
部署Dockerkubeadm部署k8s要求所有主机上预先安装有docker环境。
安装Docker服务1curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动docker并设置为开机启动1systemctl start docker && systemctl enable docker
注意:若IPtables规则在安装docker前没有清除,可以在安装完docker后清除规则然后重启docker服务。
修改c ...
Kubernetes集群的部署和运行
kubernetes集群的部署和运行模型分为3种:
二进制程序部署二进制程序:Master和Worker节点上的所有组件,都需要rpm包或者二进制程序文件手动部署管理。
Pod模式运行Pod:以Pod模式运行的kubernetes又分为2类:
Static Pod:静态pod,kubelet和docker都以守护进程进行运行,而其余的组件都运行为静态Pod,而这些Pod不受控制器管理,而是由kubelet直接管理。kubelet监视着宿主机上的某个目录中应用的manifest是否存在,如果存在则将其创建起来,并实时监控,一旦发现某个pod不存在了会将应用其清单再再次将其创建出来。这种称之为静态pod。
Master静态pod:kube-apiserver、kube-scheduler、kube-controller-manager、cni、etcd、kube-proxy
Worker静态pod:kube-proxy、cni
Pod:除开静态pod的其他组件都由controller-manager管控而非kubelet直接管控。
受controller-manager管控pod:Met ...
Kubernetes基础
k8s是将一组主机上的内存、cpu、硬盘等资源,整合为一个大的资源池。当需要运行容器时,用户不需要指定其运行再哪个主机上,只需要向k8s的接口提出请求,然后由k8s自行调度运行到一个最适合其运行的宿主机上作为容器运行起来。用户无需再面对一个个独立的主机,只需要向k8s资源池的接口提出请求即可。
若用户需要运行两个容器,且2个容器间需要通信,k8s则会抽象出一些组件。当一个服务容器启动时,会注册到k8s的注册中心,当第二个容器启动后要访问第一个容器时,先向k8s的注册中心查询服务,而后直接拿着查询获得的地址直接请求即可。
当所创建的实例无法承载客户端的请求时,传统的做法是,加服务器部署服务接入负载均均衡。而k8s则为自动扩展一个容器,然后自动加入到负载均衡中。当然可以手动介入。
k8s的自动扩容也可以为纯自动模式的,只需要在各个容器前加一个控制器用来监控控制器下面容器的数量要完全符合用户的请求。我们还可以在此控制器之前再加一层控制器,此二层控制器接入到监控系统上去,监控系统用来监控容器的CPU、内存等容量,当发现容器内资源不足时,自动指挥其一级控制器进行添加实例。当容器的CPU和内存使用 ...