一、linux命名空间和docker
1.linux的7大ns--------------ipc,net,pid,mnt.uts.user
查看linux的ns
lsns
查看不同类型的ns
[root@master ~]# lsns -t net
NS TYPE NPROCS PID USER COMMAND
4026531956 net 116 1 root /usr/lib/systemd/systemd --system --deserialize 26
查看某个ns的pid的并进入
ls -la /proc/1/ns
容器内没有命令,通过主机查看容器内nsenter -t pid
步骤1.docker ps|grep nginx
步骤2docker inspect name |grep pid
步骤3:nsenter -t pid(pid号) -n ip a---------n别掉了,不认就变成知己的ip a了
nsenter -t 1 -n ip a
2.docker本身用****cgroupfs****作为cgroup driver这是内网一套cgroup系统 ,而kubelet的cgrop系统是*****systemd****
kubelet为了保护,启动时候会检查cgroup driver,一般把docker的都改成systemd,然后reload
3,,docker优势和与containerd的差异
docker的创新点在于联合文件系统,最大的优势在于打包镜像,打报镜像自带环境,可移植----------------上下文构建
docker和containerd的主要差异,docker加上一个shim连接上crid,原因是以前docker升级会杀进程,但是cridb不会,所以现在docker 通过shim连接crid
多段构建镜像
4. 网络Overlay(加一层打包--常用---隧道模式---加一层--封包解包)和underlay(重新规划pods节点的网络---物理机的网络---不常用---)
同一node的pod的连接方式
1.NULL模式----自己配---不常用
2.默认模式--网桥和NAT----pod分别和主机形成veth--pair,docker网桥和容器网络
docker run -d --name nginx01 -p 3344:80 nginx
b暴露端的原理是iptable的规则改写
查看iptables的规则,如果是tcp协议,添加规则,目标端口是 3344会做一个DNAT(分发)
[root@master ~]# iptables-save -t nat |grep 3344
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 3344 -j DNAT --to-destination 172.17.0.2:80
二、k8s调度策略
Borg调度策略:Worst Fit(资源空闲最多的地方,放上去,所有节点的资源占用率差不多)
Best Fit(刚好满足的放上去,节省资源,成本,尽量填满节点,减少集群碎片)
Hybrid(找到局部最优放进去,而不是遍历所有节点)
1.k8s打开DEBUG模式的方法:
k get ns default -v 9
kubectl的本质是对rest api的封装,CURL命令
不要去api-server取东西,要去缓存取东西
[root@master module4]# k get ns default -v 9
I1115 18:55:49.139247 12707 loader.go:375] Config loaded from file: /root/.kube/config
I1115 18:55:49.148958 12707 round_trippers.go:424] curl -k -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.19.7 (linux/amd64) kubernetes/1dd5338" 'https://172.26.144.84:6443/api/v1/namespaces/default'
cat /root/.kube/config
此时在左侧更新ns右侧可以监听到
查看crid runtime,默认值是k8s1.24版本以前是docker
[root@master ~]# cat /var/lib/kubelet/config.yaml |grep runtime
kubeReservedCgroup: /podruntime.slice
runtimeRequestTimeout: 2m0s