集群网络创建过程
集群网络创建过程 K8S 集群网络配置完成之后,如下图所示:包括集群 CIDR、VPC 路由表、节点网络、节点的 podCIDR、节点上的虚拟网桥 cni0、连接 Pod 和网桥的 veth 等部分
初始阶段集群的创建,基于云资源 VPC 和 ECS,在创建完 VPC 和 ECS 之后,我们基本上可以得到如下图的资源配置。我们得到一个 VPC,这个 VPC 的网段是 192.168.0.0/16,我们得到若干 ECS,他们从 VPC 网段里分配到 IP 地址。
集群阶段在以上出初始资源的基础上,利用集群创建控制台得到集群 CIDR。这个值会以参数的形式传给集群节点 provision 脚本,并被脚本传给集群节点配置工具 kubeadm。kubeadm 最后把这个参数写入集群控制器静态 Pod 的 yaml 文件 kube-controller-manager.yaml。
集群控制器有了这个参数,在节点 kubelet 注册节点到集群的时候,集群控制器会为每个注册节点,划分一个子网出来,即为每个节点分配 podCIDR。如上图,Node B 的子网是 172.16.8.1/25,而 No ...
应用存储和持久化数据卷
应用存储和持久化数据卷Volumes 介绍Pod Volumes 的作用
pod容器在异常退出后,容器内部的数据不会丢失
同一个pod中多个容器需要共享数据
Pod Volumes 的类型
本地存储,常用的有 emptydir/hostpath
网络存储:网络存储当前的实现方式有两种,一种是 in-tree,它的实现代码是放在 K8s 代码仓库中的,随着 K8s 对存储类型支持的增多,这种方式会给 K8s 本身的维护和发展带来很大的负担;而第二种实现方式是 out-of-tree,它的实现其实是给 K8s 本身解耦的,通过抽象接口将不同存储的 driver 实现从 K8s 代码仓库中剥离,因此 out-of-tree 是后面社区主推的一种实现网络存储插件的方式;
Projected Volumes:它其实是将一些配置信息,如 secret/configmap 用卷的形式挂载在容器中,让容器中的程序可以通过 POSIX 接口来访问配置数据;
PV 与 PVC
Pod Volumes 的缺点
pod 中声明的 volume 生命周期与 pod 是相同的,如用 Deployment 管理 ...
Downward API从容器内获取Pod信息
Downward API从容器内获取Pod信息将Pod信息注入为环境变量通过Downward API将Pod的IP、 名称和所在Namespace注入容器的环境变量中, 容器应用使用env命令将全部环境变量打印到标准输出中
1234567891011121314151617181920212223apiVersion: v1kind: Podmetadata: name: dapi-test-podspec: containers: - name: test-container image: busybox command: [ "/bin/sh", "-c", "env" ] env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MY_POD_NAMESPACE valueFrom: field ...
kube-state-metrics与metrics-server的对比
kube-state-metrics与metrics-server的对比区别
metric-server(或heapster)是从api-server中获取cpu、内存使用率这种监控指标,并把他们发送给存储后端,如influxdb或云厂商,他当前的核心作用是:为HPA等组件提供决策指标支持。
kube-state-metrics关注于获取k8s各种资源的最新状态,如deployment或者daemonset,之所以没有把kube-state-metrics纳入到metric-server的能力中,是因为他们的关注点本质上是不一样的。metric-server仅仅是获取、格式化现有数据,写入特定的存储,实质上是一个监控系统。而kube-state-metrics是将k8s的运行状况在内存中做了个快照,并且获取新的指标,但他没有能力导出这些指标
换个角度讲,kube-state-metrics本身是metric-server的一种数据来源,虽然现在没有这么做。
另外,像Prometheus这种监控系统,并不会去用metric-server中的数据,他都是自己做指标收集、集成的(Pro ...
kubelet操作
kubelet操作kubelet可操作对象以及缩写
资源对象类型
缩写
clusters
componentstatuses
cs
configmaps
cm
daemonsets
ds
deployment
deploy
endpoints
ep
events
ev
horizontalpodautoscalers
hpa
ingresses
ing
Jobs
limitranges
limits
nodes
no
namespaces
ns
networkpolicies
statefulsets
persistentvolumeclaims
pvc
persistenvolumes
pv
pods
po
podsercuritypolicies
psp
podtemplates
replicasets
rs
replicationcontrollers
rc
resourcequotas
quota
cronjob
secrets
serviceaccoun ...
kudbernetes安装 Metrics-server
kudbernetes安装 Metrics-server从 v1.8 开始,资源使用情况的度量(如容器的 CPU 和内存使用)可以通过 Metrics API 获取。,用户可以直接获取这些metrics信息(例如通过执行kubect top命令),HPA使用这些metics信息来实现动态伸缩。1 Metrics server是K8S集群资源使用情况的聚合器2 从1.8版本开始,Metrics server默认可以通过kube-up.sh 脚本以deployment的方式进行部署,也可以通过yaml文件的方式进行部署3 Metrics server收集所有node节点的metrics信息
需要注意的是:1 Metrics API 只可以查询当前的度量数据,并不保存历史数据2 Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护3 必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据
集群准备
集群基本环境docker版本: 17 ...
Kubernetes 容器运行时(CRI)
Kubernetes 容器运行时(CRI)kubernetes各个组件MasterMaster 是整个集群的大脑,所有的编排、调度、API 访问等都由 Master 来负责
etcd 保存了整个集群的状态
kube-apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API
注册和发现等机制。并且无论是集群内部还是外部的组件,都必须通过API Server来访问数据
kube-controller-manager 负责维护集群的状态,包括很多资源的控制器,是保证 Kubernetes 声明式 API工作的大脑,比如故障检测、自动扩展、滚动更新等
kube-scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的 Node 上
Node负责运行具体的容器,并为容器提供存储、网络等必要的功能
kubelet 负责维持容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理
Container runtime 负责镜像管理以及 Pod 和容器的真正运行。Kubelet 默认的容器运行时为 Docker
kube-proxy ...
pod调度
pod调度NodeSelector 定向调度将Pod调度到指定的一些Node上, 可以通过Node的标签(Label) 和Pod的nodeSelector属性相匹配来实现。
如果我们给多个Node都定义了相同的标签(例如zone=north) , 则scheduler会根据调度算法从这组Node中挑选一个可用的Node进行Pod调度。
如果我们指定了Pod的nodeSelector条件, 且在集群中不存在包含相应标签的Node, 则即使在集群中还有其他可供使用的Node, 这个Pod也无法被成功调度。
NodeAffinity: Node亲和性调度RequiredDuringSchedulingIgnoredDuringExecution必须满足指定的规则才可以调度Pod到Node上(功能与nodeSelector很像, 但是使用的是不同的语法), 相当于硬限制
PreferredDuringSchedulingIgnoredDuringExecution强调优先满足指定规则, 调度器会尝试调度Pod到Node上, 但并不强求, 相当于软限制。 多个优先级规则还可以设置权重(weig ...
Prometheus-operator获取k8s指标失败
Prometheus-operator获取k8s指标失败Prometheus-operator获取kubelet指标失败的解决方法问题描述使用Prometheus-operator chart搭建完成后发现部分集群的kubelet采集job拉取指标失败显示500错误
问题可能发生的原因由于k8s集群各个节点未开启kubelet组件采集的权限导致
问题解决参考链接修改各个节点位于/etc/systemd/system/kubelet.service.d/10-kubeadm.conf位置的kubelet配置文件修改命令如下,记得修改前进行配置文件的备份
1234567KUBEADM_SYSTEMD_CONF=/etc/systemd/system/kubelet.service.d/10-kubeadm.confsed -e "/cadvisor-port=0/d" -i "$KUBEADM_SYSTEMD_CONF"if ! grep -q "authentication-token-webhook=true" " ...
prometheus中cadvisor相关指标
prometheus中cadvisor相关指标容器监控的内存相关指标
名称
类型
单位
说明
container_memory_rss
gauge
字节数 bytes
RSS内存,即常驻内存集(Resident Set Size),是分配给进程使用实际物理内存,而不是磁盘上缓存的虚拟内存。RSS内存包括所有分配的栈内存和堆内存,以及加载到物理内存中的共享库占用的内存空间,但不包括进入交换分区的内存。
container_memory_usage_bytes
gauge
字节数 bytes
当前使用的内存量,包括所有使用的内存,不管有没有被访问。
container_memory_max_usage_bytes
gauge
字节数 bytes
最大内存使用量的记录。
container_memory_cache
gauge
字节数 bytes
高速缓存(cache)的使用量。cache是位于CPU与主内存间的一种容量较小但速度很高的存储器,是为了提高cpu和内存之间的数据交换速度而设计的。
container_memory_swap
gauge
字节数 byte ...