原创网站设计费用,福建西南建设有限公司网站,无忧中英繁企业网站系统 破解,广州网站建设改版pod的调度流程及常见状态
pod的调度流 pod的常见状态
Unschedulable#xff1a;#Pod不能被调度#xff0c;kube-scheduler没有匹配到合适的node节点
PodScheduled#xff1a;#pod正处于调度中#xff0c;在kube-scheduler刚开始调度的时候#xff0c;还没有将pod分配…pod的调度流程及常见状态
pod的调度流 pod的常见状态
Unschedulable#Pod不能被调度kube-scheduler没有匹配到合适的node节点
PodScheduled#pod正处于调度中在kube-scheduler刚开始调度的时候还没有将pod分配到指定的node在筛选出合适的节点后就会更新etcd数据将pod分配到指定的node
Pending: #正在创建Pod但是Pod中的容器还没有全部被创建完成[处于此状态的Pod应该检查Pod依赖的存储是否有权限挂载等。
Failed #Pod中有容器启动失败而导致pod工作异常。
Unknown #由于某种原因无法获得pod的当前状态通常是由于与pod所在的node节点通信错误。
Initialized#所有pod中的初始化容器已经完成了
ImagePullBackOff #Pod所在的node节点下载镜像失败
Running #Pod内部的容器已经被创建并且启动。
Ready #表示pod中的容器已经可以提供访问服务
Error: #pod 启动过程中发生错误
NodeLost: #Pod 所在节点失联
Waiting: #Pod 等待启动
Terminating: #Pod 正在被销毁
CrashLoopBackOff#pod崩溃但是kubelet正在将它重启InvalidImageName#node节点无法解析镜像名称导致的镜像无法下载
ImageInspectError#无法校验镜像镜像不完整导致
ErrImageNeverPull#策略禁止拉取镜像镜像中心权限是私有等
RegistryUnavailable#镜像服务器不可用网络原因或harbor宕机
ErrImagePull#镜像拉取出错超时或下载被强制终止
CreateContainerConfigError#不能创建kubelet使用的容器配置
CreateContainerError#创建容器失败
RunContainerError#pod运行失败容器中没有初始化PID为1的守护进程等
ContainersNotInitialized#pod没有初始化完毕
ContainersNotReady#pod没有准备完毕
ContainerCreating#pod正在创建中
PodInitializing#pod正在初始化中
DockerDaemonNotReady#node节点decker服务没有启动
NetworkPluginNotReady#网络插件没有启动pause容器及init容器
pause容器简介-宿主机的namespace Pause 容器又叫 Infra 容器是pod的基础容器镜像体积只有几百KB 左右配置在kubelet中主要的功能是一个pod中多个容器的网络通信。 Infra 容器被创建后会初始化 Network Namespace之后其它容器就可以加入到 Infra 容器中共享Infra 容器的网络了因此如果一个 Pod 中的两个容器 A 和 B那么关系如下
1.A容器和B容器能够直接使用 localhost 通信
2.A容器和B容器可以可以看到网卡、IP与端口监听信息。
3.Pod 只有一个 IP 地址也就是该 Pod 的 Network Namespace 对应的 IP 地址(由Infra 容器初始化并创建)。
4.k8s环境中的每个Pod有一个独立的IP地址(前提是地址足够用)并且此IP被当前 Pod 中所有容器在内部共享使用。
5.pod删除后Infra 容器随机被删除,其IP被回收。Pause容器共享的Namespace
1.NET NamespacePod中的多个容器共享同一个网络命名空间即使用相同的IP和端口信息。
2.IPC NamespacePod中的多个容器可以使用System V IPC或POSIX消息队列进行通信。
3.UTS Namespacepod中的多个容器共享一个主机名。MNT Namespace、PID Namespace、User Namespace未共享。 pause容器简介-namespace验证 #进入到容器
[rootk8s-master1 case1-pod]#kubectl exec -it nginx sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # ip a
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: tunl0NONE: NOARP mtu 1480 qdisc noop state DOWN qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0if56: BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN mtu 1500 qdisc noqueue state UP link/ether a6:c3:b1:0c:36:41 brd ff:ff:ff:ff:ff:ffinet 10.200.107.233/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::a4c3:b1ff:fe0c:3641/64 scope link valid_lft forever preferred_lft forever
/ # cat /sys/class/net/eth0/iflink
56
或者
bash-4.4# apk add ethtoolbash-4.4# ethtool -S eth0NIC statistics:peer_ifindex: 56#到pod所在的宿主机验证网卡
[rootk8s-node3 ~]#ip link show5: tunl0NONE: NOARP,UP,LOWER_UP mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0
56: calic440f455693if4: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-1683a021-919d-faa3-c0db-b814c55bb0f1[rootk8s-node3 ~]#ls /run/netns/
cni-1683a021-919d-faa3-c0db-b814c55bb0f1 cni-90ab4d6e-e15c-6c33-5d87-b33e2ed54e0d
cni-76dbc694-93ae-3c07-bd07-0b9c721f5344
[rootk8s-node3 ~]#nsenter --net/run/netns/cni-1683a021-919d-faa3-c0db-b814c55bb0f1 ip a
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: tunl0NONE: NOARP mtu 1480 qdisc noop state DOWN group default qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0if56: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP group default link/ether a6:c3:b1:0c:36:41 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.200.107.233/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::a4c3:b1ff:fe0c:3641/64 scope link valid_lft forever preferred_lft foreverrootk8s-node2:~# sudo nsenter --net/run/netns/cni-80955d5c-421a-a0ad-9889-a5bb5bf934d9 ifconfig #containerd、主机名解析
rootk8s-node2:~# sudo nsenter --net/run/docker/netns/5593316039dd ifconfig #dodckerpause容器-配置示例
1.在有docker或者containerd主机测试准备nginx配置文件并配置动静分离
[rootjenkins test-nginx]#pwd
/root/test-nginx
[rootjenkins test-nginx]#cat nginx.conf
error_log stderr;
events { worker_connections 1024; }
http {access_log /dev/stdout;server {listen 80 default_server;server_name localhost;location / {index index.html index.php;root /usr/share/nginx/html;}location ~ \.php$ {root /usr/share/nginx/html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}}2.部署pause容器
[rootjenkins ~]nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8
[rootjenkins ~]nerdctl run -d -p 80:80 --name pause-container-test \ registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.83.准备测试web页面
[rootjenkins html]#ll
total 8
-rw-r--r-- 1 root root 35 Nov 23 15:31 index.html
-rw-r--r-- 1 root root 26 Nov 23 15:30 index.php
[rootjenkins html]#cat *
h1pause container web test/h1?phpphpinfo();
?4.部署nginx 容器并使用paush容器网络
[rootjenkins html]#
docker run -d --name nginx-container-test \
-v pwd/nginx.conf:/etc/nginx/nginx.conf \
-v pwd/html:/usr/share/nginx/html \
--netcontainer:pause-container-test \
nginx
5.部署php容器并使用paush容器网络
[rootjenkins html]#
docker run -d --name php-container-test \
--netcontainer:pause-container-test \
-v pwd/html:/usr/share/nginx/html \
php:5.6.40-fpmpause容器-验证 init容器-简介 init容器的作用 1.可以为业务容器提前准备好业务容器的运行环境比如将业务容器需要的配置文件提前生成并放在指定位置、检查数据权限或完整性、软件版本等基础运行环境。。 2.可以在运行业务容器之前准备好需要的业务数据比如从OSS下载、或者从其它位置copy。 3.检查依赖的服务是否能够访问。 init容器的特点 1.一个pod可以有多个业务容器还能在有多个init容器但是每个init容器和业务容器的运行环境都是隔离的。 2.init容器会比业务容器先启动。 3.init容器运行成功之后才会继续运行业务容器。 4.如果一个pod有多个init容器则需要从上到下逐个运行并且全部成功最后才会运行业务容器。 5.init容器不支持探针检测(因为初始化完成后就退出再也不运行了)。
[rootk8s-master1 case1-init-container]#cat 1-init-container.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:labels:app: myserver-myapp name: myserver-myapp-deployment-namenamespace: myserver
spec:replicas: 1 selector:matchLabels:app: myserver-myapp-frontendtemplate:metadata:labels:app: myserver-myapp-frontendspec:containers:- name: myserver-myapp-containerimage: nginx:1.20.0 #imagePullPolicy: AlwaysvolumeMounts:- mountPath: /usr/share/nginx/html/myservername: myserver-data- name: tz-configmountPath: /etc/localtimeinitContainers:- name: init-web-dataimage: centos:7.9.2009command: [/bin/bash,-c,for i in seq 1 10;do echo h1$i web page at $(date %Y%m%d%H%M%S) h1 /data/nginx/html/myserver/index.html;sleep 1;done]volumeMounts:- mountPath: /data/nginx/html/myservername: myserver-data- name: tz-configmountPath: /etc/localtime- name: change-data-ownerimage: busybox:1.28command: [/bin/sh,-c,/bin/chmod 644 /data/nginx/html/myserver/* -R]volumeMounts:- mountPath: /data/nginx/html/myservername: myserver-data- name: tz-configmountPath: /etc/localtimevolumes:- name: myserver-datahostPath:path: /tmp/data/html- name: tz-confighostPath:path: /etc/localtime ---
kind: Service
apiVersion: v1
metadata:labels:app: myserver-myapp-servicename: myserver-myapp-service-namenamespace: myserver
spec:type: NodePortports:- name: httpport: 80targetPort: 80nodePort: 30080selector:app: myserver-myapp-frontendHealth Check
由发起者对容器进行周期性健康状态检测。
周期检测相当于人类的周期性体检
每次检测相当于人类每次体检的内容
[rootk8s-master1 case2-docker-container-healthy-check]#cat 1.docker-compose.yaml
version: 3.6
services:nginx-service:image: nginx:1.20.2 container_name: nginx-web1expose:- 80- 443ports:- 80:80- 443:443restart: alwayshealthcheck: #添加服务健康状态检查test: [CMD, curl, -f, http://localhost]interval: 5s #健康状态检查的间隔时间默认为30stimeout: 5s #单次检查的失败超时时间默认为30sretries: 3 #连续失败次数默认3次当连续失败retries次数后将容器置为unhealthy状态start_period: 60s #60s后每间隔interval的时间检查一次连续retries次后才将容器置为unhealthy状态, 但是start_period时间内检查成功就认为是检查成功并装容器置于healthy状态
[rootk8s-master1 case2-docker-container-healthy-check]#cat 2.Dockerfile
FROM nginx:1.20.2maintainer jack 2973707860qq.comHEALTHCHECK --interval5s --timeout2s --retries3 \CMD curl --silent --fail localhost:80 || exit 1