原创 更新于 时间( 2020-09-22 14:18:34) ( 197) 次浏览 标签 :
导读

用K8s实践部署可扩容缩减的项目实战 ...

这边用一个清洗项目来做一个简单的部署例子,这个项目的功能是,启动一个消费rabbitmq 的项目,mq中存储的是数据队列,容器消费mq ,获取数据,进行实体识别,对数据进行清洗处理,下面分别创建4个服务,扩容和缩减

创建

这里由于我的registry是放在阿里云上的,所以需要先添加 secret docker-registry,否则在 k8s 中 pull images 会出现 以下这种错误:

Failed to pull image "registry.cn-hangzhou.aliyuncs.com/leon0204/xxxx": rpc error: code = Unknow

解决办法如下:

kubectl create secret docker-registry cleansecret \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=你的name \
--docker-password=你的密码 

查看创建的密钥 在这里插入图片描述

yml文件加入密钥参数

在这里插入图片描述

这样就可以在 创建中 免密拉取镜像了 ~

kubectl create -f clean.yaml

容器创建中,第一次你还可能看到这样的橙色过渡,之后如果更新,或者删除重新创建,都是很快创建完成,因为第一次是从registry 拉取镜像,之后本地有镜像缓存,即使是更新也会很快创建

在这里插入图片描述 容器创建完成

在这里插入图片描述

通过 rabbitmq 的 queue 页面 可以看到有4个消费者在这里插入图片描述 去 Node 节点上查看创建的容器

Node1 节点在这里插入图片描述 Node2 节点在这里插入图片描述 可以看到这里 两个 Node 节点 分别启动了 2个 正在运行的 容器 和 2个 pause 容器

k8 调整 Deployment 的副本数

# 上面,我们创建了4个容器 此时有4个服务在进行清洗,如果我们想扩容到10个,怎么操作呢?

[root@ecs-ca42 sc]# kubectl get pods -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE
clean-pod-6c79ccd7d5-4lcsb   1/1     Running   1          4h    10.244.7.5    k8s-node1   <none>
clean-pod-6c79ccd7d5-pdt47   1/1     Running   0          4h    10.244.4.14   k8s-node2   <none>
clean-pod-6c79ccd7d5-sm5z2   1/1     Running   0          4h    10.244.7.4    k8s-node1   <none>
clean-pod-6c79ccd7d5-x7275   1/1     Running   0          4h    10.244.4.13   k8s-node2   <none>

# 非常的简单,kubectl scale deployment pod-name --replicas=n

[root@ecs-ca42 sc]# kubectl scale deployment clean-pod --replicas=10
deployment.extensions/clean-pod scaled


# 查看扩容后的 数量 
[root@ecs-ca42 sc]# kubectl get pods -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE
clean-pod-6c79ccd7d5-2x84m   1/1     Running   0          4s    10.244.7.7    k8s-node1   <none>
clean-pod-6c79ccd7d5-4lcsb   1/1     Running   1          4h    10.244.7.5    k8s-node1   <none>
clean-pod-6c79ccd7d5-97db5   1/1     Running   0          4s    10.244.4.16   k8s-node2   <none>
clean-pod-6c79ccd7d5-c4vsn   1/1     Running   0          4s    10.244.7.8    k8s-node1   <none>
clean-pod-6c79ccd7d5-hjpxf   1/1     Running   0          4s    10.244.4.15   k8s-node2   <none>
clean-pod-6c79ccd7d5-pdt47   1/1     Running   0          4h    10.244.4.14   k8s-node2   <none>
clean-pod-6c79ccd7d5-pdxvc   1/1     Running   0          4s    10.244.4.17   k8s-node2   <none>
clean-pod-6c79ccd7d5-qnshk   1/1     Running   0          4s    10.244.7.6    k8s-node1   <none>
clean-pod-6c79ccd7d5-sm5z2   1/1     Running   0          4h    10.244.7.4    k8s-node1   <none>
clean-pod-6c79ccd7d5-x7275   1/1     Running   0          4h    10.244.4.13   k8s-node2   <none>


在这里插入图片描述

在这里插入图片描述 可以看到 已经扩容到 10个服务,同样的 如果想要缩减

[root@ecs-ca42 sc]# kubectl scale deployment clean-pod --replicas=5
deployment.extensions/clean-pod scaled
[root@ecs-ca42 sc]# kubectl get pods -o wide
NAME                         READY   STATUS        RESTARTS   AGE   IP            NODE        NOMINATED NODE
clean-pod-6c79ccd7d5-2x84m   1/1     Terminating   0          9m    10.244.7.7    k8s-node1   <none>
clean-pod-6c79ccd7d5-4lcsb   1/1     Running       1          4h    10.244.7.5    k8s-node1   <none>
clean-pod-6c79ccd7d5-97db5   1/1     Terminating   0          9m    10.244.4.16   k8s-node2   <none>
clean-pod-6c79ccd7d5-c4vsn   1/1     Terminating   0          9m    10.244.7.8    k8s-node1   <none>
clean-pod-6c79ccd7d5-hjpxf   1/1     Running       0          9m    10.244.4.15   k8s-node2   <none>
clean-pod-6c79ccd7d5-pdt47   1/1     Running       0          4h    10.244.4.14   k8s-node2   <none>
clean-pod-6c79ccd7d5-pdxvc   1/1     Terminating   0          9m    10.244.4.17   k8s-node2   <none>
clean-pod-6c79ccd7d5-qnshk   1/1     Terminating   0          9m    10.244.7.6    k8s-node1   <none>
clean-pod-6c79ccd7d5-sm5z2   1/1     Running       0          4h    10.244.7.4    k8s-node1   <none>
clean-pod-6c79ccd7d5-x7275   1/1     Running       0          4h    10.244.4.13   k8s-node2   <none>

错误处理

1

Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "168640f2c2cea768f3734d6dc7858816f2bdf310c71acf31b35dfd03c367e327" network for pod "clean-pod-6c79ccd7d5-cqgzh": NetworkPlugin cni failed to set up pod "clean-pod-6c79ccd7d5-cqgzh_default" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.3.1/24

# 解决办法
#在node(非master)节点上
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
##重启kubelet
systemctl restart kubelet
##重启docker
systemctl restart docker
再次 kubeadm join 


2 pause-amd64 pull error

从docker.io把pause-amd64镜像取下来

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

3 如何重新生成 kubeadm join 的 token

kubeadm token create

> 1xxxx1


openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
> xxxxx2 

kubeadm join 172.16.0.100:6443 --token 1xxxx1 --discovery-token-ca-cert-hash sha256:xxxxx2

4 Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/system.slice/kubelet.service

在这里插入图片描述

gcr.io/google_containers/pause-amd64 的作用

当我们stop一个 在这里插入图片描述 在这里插入图片描述

it's part of the infrastructure. This container is started first in all Pods to setup the network for the Pod.

简单来说,pause-amd64,又叫 Infra 容器,是 一对一容器的父进程, 在 pause容器源码 上可以看到 这个容器是用 C 去写的,pause容器大部分时间都在沉睡,等待有信号将其唤醒。当容器 kill 的时候,pause 捕捉到这个信号,作出控制

pause dockerFile

FROM scratch
ARG ARCH
ADD bin/pause-${ARCH} /pause
ENTRYPOINT ["/pause"]
Leon0204

打杂后端程序猿~

讨论区

发表评论
昵称:
评论:
验证