CentOS部署k8s+docker分布式扩缩容系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS部署k8s+docker分布式扩缩容系统相关的知识,希望对你有一定的参考价值。
参考技术A 文章摘自: https://www.kubernetes.org.cn/doc-25https://www.cnblogs.com/spll/p/10033316.html
两台机器:192.168.26.227(master),192.168.26.228
1、所有机器上执行以下命令,准备安装环境:(注意是所有机器,主机master,从机node都要安装)
1.1、安装epel-release源
1.2、所有机器关闭防火墙
2、现在开始master主机上192.168.26.227安装kubernetes Master
2.1、使用yum安装etcd、kubernetes-master
2.2、编辑:vi /etc/etcd/etcd.conf文件,修改结果如下:
2.3、配置:vi /etc/kubernetes/apiserver文件,配置结果如下:
2.4、启动etcd、kube-apiserver、kube-controller-manager、kube-scheduler等服务,并设置开机启动。
2.5、在etcd中定义flannel网络
3.1、在node机上192.168.26.228安装kubernetes Node和flannel组件应用
3.2、为flannel网络指定etcd服务,修改/etc/sysconfig/flanneld文件,配置结果如下图:
3.3、修改:vi /etc/kubernetes/config文件,配置结果如下图:
3.4、修改node机的kubelet配置文件/etc/kubernetes/kubelet
3.5、node节点机上启动kube-proxy,kubelet,docker,flanneld等服务,并设置开机启动。
在master主机上192.168.26.227执行如下命令,查看运行的node节点机器:
成功啦啦啦啦,结果图如下:
使用配置文件创建一个容器
Kubernetes是在Pod中来运行容器的。一个包含了一个简单的HellWorld容器的Pod可以被如下的YAML文件指定(注意格式):
metadata.name的 值 hello-world ,将会成为创建成功后Pod的名称,这个名称必须在集群中唯一,而 container[0].name 只是容器在Pod中的昵称。 image 就是Docker image的名称且Kubernetes默认会从Docker Hub中拉取镜像。
restartPolicy : Never 指明了我们只是想运行容器一次然后就终止Pod。
Command 覆盖了docker容器的 Entrypoint 。命令的参数(相当于Docker的 Cmd )可以指定 args 参数,如下所示:
创建这个pod就可以使用 create 命令了
当成功创建时, kubectl 打印出资源类型和资源名称。
配置验证
如果你不确定指定的资源是否正确,你可以 kubectl 帮你验证。
$ kubectl create -f ./hello-world.yaml --validate
假设我们指定的是 entrypoint 而不是 command ,你会看到如下输出:
kubectl create –validate 会警告已经检测出问题,除非缺少必须的字段或者字段值不合法,最后kubectl还是会创建出资源。一定要小心,未知的API字段会被忽略。这个pod没有 command 字段而被创建,command字段是一个可选字段,因为image镜像可以指定 Entrypoint 。访问Pod API object来查看合法字段列表。
环境变量和增加变量
Kubernetes没有自动的在shell中的运行命令(不是所有镜像都有shell)。如果你想在shell中运行你的命令,例如增加环境便令(使用 env 字段),你可以按如下做法:
然而,一个shell需要的不仅是增加环境变量。如果你使用 $(ENVVAR) 语法Kubernetes将会为你做这些事。
查看pod状态
使用get命令,你可以看到你已经创建的pod(事实上是集群中你的所有pod)。如果你在创建后用足够快的速度输入 get 命令,你会看到下面的内容:
初始化的时候,新创建的pod还未被调度,也就是还没有节点被选中去运行它。pod创建后会进行调度但是它很快,所以你正常是不会看到pods处于未被调度的状态,除非有问题产生。
在pod被调度之后,如果节点中还没有镜像那么就会先通过docker拉取响应的镜像。一切就绪后,你会看到容器在运行:
而开始运行后很快这个容器将会被终止。 kubectl 会显示容器已经不再运行以及推出状态:
查看pod输出
你会想要查看你运行命令的输出。像 docker logs 一样, kubectl logs 也会显示输出:
删除pods
当你看完的输出,你应该删除pod:
就像 create 一样,删除成功时 kubectl 也会打印出资源类型和资源名称。
你也可以使用 资源/名称格式指定一个pod:
终止pods不会自动的删除,你可以观察他们的最终状态,所以请确定清理了你的已经结束的pods。
在另一方面,为了在节点中释放磁盘空间容器和他们的日志也会被自动删除。
docker 搭建redis三主三从及扩缩容4主4从实战
文章目录
三主三从搭建
1. 拉镜像 redis:6.0.8
docker pull redis:6.0.8
2. 生产6个实例
docker run -d --name redis-node-1 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
3. 进入任意一台机器: 以node1为例
docker exec -it redis-node-1 bash
执行配置命令(记得修改ip):
redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1
4. 查看集群状态
redis-cli -p 6381
PS 1. 采用集群方式连接 -c
redis-cli -p 6381 -c
PS 2. 查看集群信息
redis-cli --cluster check 127.0.0.1:6381
扩容为四主四从
1. 再生产2个实例
docker run -d --name redis-node-7 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387 docker run -d --name redis-node-8 --net host --privileged=true -v D:\\Users\\damu\\docker_all_conf/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
2. 将新增的6387节点作为master加入集群
- 进入6387节点
docker exec -it redis-node-7 bash
- 加入redis集群
redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6381
ps:
redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
3. 检查集群情况并且给新机器重新分配slot槽节点
-
redis-cli --cluster check 127.0.0.1:6381
-
redis-cli --cluster reshard 127.0.0.1:6381
-
再次检查集群状况 redis-cli --cluster check 127.0.0.1:6381
4. 为新的master节点添加从节点6388
redis-cli --cluster add-node 127.0.0.1:6388 127.0.0.1:6387 --cluster-slave --cluster-master-id 41f6e15f35e3226ffb41ffb27a83e624c71da933
检查集群状况
再缩容为三主三从 (删除1-主和5-从)
1. 任意进入一台机器,删除从节点 6385
redis-cli --cluster del-node 127.0.0.1:6385 241fe01f01ae5515fff71e17b2c7f9e4a4698a2e
2. 分配1节点上的slot槽节点给7 (其他分配也行,all是AA)
-
redis-cli --cluster reshard 127.0.0.1:6381
-
接受slot 的node节点:41f6e15f35e3226ffb41ffb27a83e624c71da933
-
清除slot 的node节点:49663ab523f4a0802589343525a63926ebf1458d
3. 从集群中删除node-1 节点,并检查集群状况
redis-cli --cluster del-node 127.0.0.1:6381 49663ab523f4a0802589343525a63926ebf1458d
以上是关于CentOS部署k8s+docker分布式扩缩容系统的主要内容,如果未能解决你的问题,请参考以下文章
kubeadm安装Kubernetes v1.24.0 docker