K8s实验环境:

一个manager,2个worker node的centos7,保证互相能够通信:

一、准备步骤:

步骤1.关闭三台设备selinux和设置防火墙

selinux需要将修改/etc/selinux/config文件,将SELINUX设置为disable;


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

防火墙放行所有数据包:

[root@vms201 ~]# firewall-cmd --set-default-zone=trusted
Warning: ZONE_ALREADY_SET: trusted
success

步骤2.修改hosts文件,保证三台设备能够通过域名访问
vms201上:vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.201 vms201.rhce.cc vms201
192.168.0.202 vms202.rhce.cc vms202
192.168.0.203 vms203.rhce.cc vms203

同步给vms202和vms203:

scp /etc/hosts vms202:/etc/
scp /etc/hosts vms203:/etc/

步骤3:三台设备上关闭SWAP

swapoff -a ; sed -i '/swap/d' /etc/fstab

步骤4:三台设备配置yum源

wget ftp://ftp.rhce.cc/k8s/* -P /etc/yum.repos.d/

二、安装Docker,作为kubernetes的runtime:

步骤1:在三台设备上安装docker-ce版本,并启动

yum install docker-ce -ysystemctl enable docker --now

步骤2:设置镜像加速器,使用阿里云的即可

cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOFsystemctl restart docker

三、K8S安装:

步骤1:三台设备上设置iptables相关属性

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

步骤2:三台设备上安装K8s,并启动服务

yum install -y kubelet-1.21.0-0 kubeadm-1.21.0-0 kubectl-1.21.0-0 --disableexcludes=kubernetessystemctl restart kubelet ; systemctl enable kubelet

K8S的版本命名,例如,版本号为x.y.z-0,其中x为大版本号,y为小版本号,z为补丁号。版本前面一般会加一个v,表示version。

通过如下命令可以查看有哪些版本的k8s

yum list --showduplicates kubeadm --disableexcludes=kubernetes

步骤3:在master上初始化集群

在master上的核心组件,例如api-server、scheduler、kubelet、etcd、scheduler等都是以容器的方式运行,由于默认的国外镜像站点可能无法访问,所以这里修改为阿里云镜像下载,同时需要指定版本和pod的网段地址:

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16

下载完成后后使用docker images查看下载的镜像。在下载过程中可能会出现报错信息提示镜像:
docker pull registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
没有下载下来,这是由于阿里云命名错误 。

所以我们需要自己下载导入并同步到另外两台设备上去,并加载:

scp coredns-1.21.tar vms202:~
scp coredns-1.21.tar vms203:~
docker load -i coredns-1.21.tar

导入镜像完成后重新初始化k8s:

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16

步骤4:在master上创建k8s认证文件

上一步初始化完成后会有提示信息,依次复制提信息中的三条命令即可:

  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

步骤5:两台worker noeds加入集群
在master上:

kubeadm  token create --print-join-command

将显示的内容复制到两台work nodes即可。在master上查看nodes:

[root@vms201 ~]# kubectl get nodes
NAME             STATUS      ROLES                  AGE    VERSION
vms201.rhce.cc   NotReady    control-plane,master   x      v1.21.0
vms202.rhce.cc   NotReady    <none>                 x      v1.21.0
vms203.rhce.cc   NotReady    <none>                 x      v1.21.0

可以看打vms202和vms203都加入到了集群中;但是STATUS是NotReady,原因是各个Pod之间无法通信,需要安装CNI网络插件。这里安装calico:

curl https://docs.projectcalico.org/manifests/calico-etcd.yaml -o calico.yaml

然后查看calico.yaml需要哪些镜像:

[root@vms201 ~]# grep image calico.yamlimage: docker.io/calico/cni:v3.19.1image: docker.io/calico/pod2daemon-flexvol:v3.19.1image: docker.io/calico/node:v3.19.1image: docker.io/calico/kube-controllers:v3.19.1

然后再master上将所有所需镜像pull下来,并打包成tar文件拷贝到2个work nodes上,并在三台设备上导入回镜像:

docker save calico/cni  calico/kube-controllers calico/node calico/pod2daemon-flexvol >  calico-3.19-img.tarscp calico-3.19-img.tar vms202:~
scp calico-3.19-img.tar vms203:~docker load -i calico-3.19-img.tar

在三台设备上使用docker images查看加载是否成功。然后在master上修改calico.yaml文件,并安装:

vim calico.yaml

搜索192.168.0.0,修改为初始化集群时pod的10.244.0.0/24即可:

- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"

修改保存后在master设备上使用如下命令安装calico:

kubectl apply -f calico.yaml

安装完成后查看重新查看noeds状态:

[root@vms201 ~]# kubectl get nodes
NAME             STATUS   ROLES                  AGE    VERSION
vms201.rhce.cc   Ready    control-plane,master   2d8h   v1.21.0
vms202.rhce.cc   Ready    <none>                 2d8h   v1.21.0
vms203.rhce.cc   Ready    <none>                 2d8h   v1.21.0

可以看到STATUS为Ready。

步骤6:设置tab键补全k8s命令的功能

前提: bash-completion.noarch 必须要安装才行。

我们目前无法使用tab键补全命令,所以需要进行配置。在master上:

vim /etc/profile

加入一行配置:

# /etc/profile
source <(kubectl completion bash)# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

保存配置后更新配置

source /etc/profile

完成后即可使用tab键补全k8s相关命令。

四、重装K8s集群相关操作

步骤1:在master上删除nodes

kubectl drain vms202.rhce.cc --ignore-daemonsets
kubectl drain vms203.rhce.cc --ignore-daemonsetskubectl delete nodes vms202.rhce.cc
kubectl delete nodes vms203.rhce.cckubectl drain vms201.rhce.cc --ignore-daemonsets
kubectl delete nodes vms201.rhce.cc

完成后可以到集群已经没有了:

[root@vms201 ~]# kubectl get nodes
No resources found

步骤2:在三台设备上清空设置

kubeadm reset

步骤3:在master上重新初始化集群

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16

步骤4:在master上创建k8s认证文件

上一步初始化完成后会有提示信息,依次复制提信息中的三条命令即可:

  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

注意提示是否覆盖时选择y。

步骤5:两台work noeds加入集群
在master上:

kubeadm  token create --print-join-command

将显示的内容复制到两台work nodes即可。然后在master上查看nodes:

[root@vms201 ~]# kubectl get nodes
NAME             STATUS   ROLES                  AGE     VERSION
vms201.rhce.cc   Ready    control-plane,master   5m36s   v1.21.0
vms202.rhce.cc   Ready    <none>                 91s     v1.21.0
vms203.rhce.cc   Ready    <none>                 87s     v1.21.0

可以看懂已经重新创建集群。但是这里有一个问题就是STATUS是Ready,这是因为我们之前装过了calico的原因,这个数据已经写入到了etcd数据中了,但是重装K8s后calico也需要重新安装:

kubectl apply -f  calico.yaml

注意:如果master没有重置,只重置了worker,是不需要安装calico的。

五、部署多master的场景

当集群中仅存在一个master节点时,如果其出现了故障,会导致K8s的控制平面完全失效。所以为了保证K8s集群的高可靠性,我们可以设置多个master,当其中部分master出现故障时,其他master依然能够管理整个集群。

正常情况下,我们可以使用一个负载均衡器将请求转发给集群中的master,如果有一天其中的一个master出现故障后,负载均衡器仅需要将请求发送给依旧运行正常的master即可。

环境中有2个master,1个worker node。管理流量访问负载均衡器haproxy,地址为192.168.0.101,然后流量被均匀负载到两个master上。两个master之间的数据由etcd来同步。如果想要更高的可靠性,可以设置两个以上的loadbalance、和worker,这里仅是实验演示master的高可用性。

loadbalance安装步骤:

yum inastll haproxy -y

编辑配置文件,在文件末尾设置关联的master:

vim /etc/haproxy/haproxy.cfg

两个服务器的权重相同:

listen k8s-lb *:6443mode tcpbalance roundrobinserver s1 192.168.0.200:6443 weight 1server s2 192.168.0.201:6443 weight 1

启动服务并查看状态:

systemctl enable haproxy --now[root@vms101 ~]# systemctl enable haproxy --now
Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.
[root@vms101 ~]# systemctl status haproxy
● haproxy.service - HAProxy Load BalancerLoaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)Active: active (running) since 一 2021-07-19 03:14:36 CST; 24s agoMain PID: 1681 (haproxy-systemd)CGroup: /system.slice/haproxy.service├─1681 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/h...├─1682 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds└─1683 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds7月 19 03:14:36 vms206.rhce.cc systemd[1]: Started HAProxy Load Balancer.
7月 19 03:14:36 vms206.rhce.cc systemd[1]: Starting HAProxy Load Balancer...
7月 19 03:14:36 vms206.rhce.cc haproxy-systemd-wrapper[1681]: haproxy-systemd-wrapper: e...
7月 19 03:14:36 vms206.rhce.cc haproxy-systemd-wrapper[1681]: [WARNING] 199/031436 (1682...
7月 19 03:14:36 vms206.rhce.cc haproxy-systemd-wrapper[1681]: [WARNING] 199/031436 (1682...
Hint: Some lines were ellipsized, use -l to show in full.

etcd安装请参考:
https://blog.csdn.net/tushanpeipei/article/details/118409836?spm=1001.2014.3001.5501

部署多master集群时需要注意的点:
大体和部署单master时一致,不同的是可以选择使用yaml文件在第一个master上来初始化集群:

kubeadm init --config=kubeadm-config.yaml

kubeadm-config.yaml文件从kubeadm config view获取,修改控制平面选项controlPlaneEndpoint,指向了haproxy的地址:

apiServer:extraArgs:authorization-mode: Node,RBACtimeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
controlPlaneEndpoint: "192.168.0.101:6443"
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.21.0
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12
scheduler: {}

完成后会和单节点相同,提示将其余的worker node和master加入集群的命令。如果是master身份加入集群,需要在以worker node加入的命令后写上–control-plane。

然后需要将在第一个master上的/etc/kubernetes/pki下的所有证书文件拷贝到其他master的相同目录下去。

更好的部署master高可用性的方式:sealos
参考文档https://www.sealyun.com/

整理资料来源:
《老段CKA课程》

二、K8s Cluster详细安装步骤相关推荐

  1. k8s简介以及linux环境下的详细安装步骤

    k8s简介以及linux环境下的详细安装步骤 k8s是Kubernetes的简称,Kubernetes中间有8个单词,所以叫k8s,就是这么简单粗暴. 我们可以看到docker的图标是鲨鱼,k8s的图 ...

  2. Ambari2.6详细安装步骤

    Ambari详细安装步骤 Ambari简介 Ambari跟Hadoop等开源软件一样,也是Apache Software Foundation中的一个项目,并且是顶级项目.目前最新的发布版本是2.7. ...

  3. Kali Linux 详细安装步骤

    Kali Linux 详细安装步骤 ​ Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统.每一季度更新一次.由Offensive Security Ltd维护和资助 ...

  4. MySQL详细安装步骤

    MySQL详细安装步骤 一.下载MySQL 点击下载MySQL 二.安装 MySQL安装文件分两种.msi和.zip,此处选择zip安装. 解压缩之后其实MySQL就可以使用了,但是要进行环境变量的配 ...

  5. Rational Rose 2007简单介绍及详细安装步骤

    Rational Rose 2007简单介绍及详细安装步骤 Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具.用于可视化建模和公司级水平软件应用的组件构 ...

  6. 超级账本Fabric 2.x 详细安装步骤及可能问题解决方式

    超级账本Fabric 2.x 详细安装步骤及可能问题解决方式 使用系统版本:Ubuntu 18.04 提示1:任何命令错误都可以试试加sudo提升权限!!! 提示2:如果Ubuntu系统没有换源可以参 ...

  7. MYSQL5.7在Linux系统详细安装步骤

    MYSQL5.7详细安装步骤 一.更换yum源 二.查看系统中是否自带安装mysql 三.删除系统自带的mysql及其依赖(防止冲突) 四.安装wget命令 五.给CentOS添加rpm源,并且选择较 ...

  8. 【安装】Windows下Oracle安装图解----oracle-win-64-11g 详细安装步骤

    [安装]Windows下Oracle安装图解----oracle-win-64-11g 详细安装步骤 一. Oracle 下载 官方下地址 http://www.oracle.com/technetw ...

  9. 安装 | Windows 10下基于Anaconda的TensorFlow详细安装步骤(续)——Pycharm运行tensorflow

    github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 Blogger:MichaelBeecha ...

  10. 开源/免费的视频会议:openmeetings的详细安装步骤

    开源/免费的视频会议:openmeetings的详细安装步骤 前言:本人由于受公司之托,叫我找个视频会议,而且还是免费..于是就迷惑,但是还得找啊,毕竟是上司交个我的任务,必须完成!!!所以就到网上找 ...

最新文章

  1. 第02次作业-线性表
  2. 【软考-软件设计师】汇编程序基本原理
  3. boost::parameter::aux::unwrap_cv_reference相关的测试程序
  4. 035-OpenStack 关闭安全组
  5. LeetCode 39. 组合总和(排列组合 回溯)
  6. 素材模板源码资源下载站源码-带用户中心和VIP充值系统等
  7. 4固定在底部_有线鼠标之灵魂伴侣,火线竞技4号RGB鼠标线夹
  8. Yam旗下Degenerative Finance已上线uSTONKS和uGAS奖励计划
  9. 软件工程基础 实验1《可行性研究与项目计划》
  10. Grasshopper 0.9汉化版下载 【Rhino5.0参数化插件】
  11. 简单版俄罗斯方块程序代码c语言,俄罗斯方块C语言程序代码.DOC
  12. 【SVN】Eclipse SVN插件下载安装
  13. Ubuntu使用问题(一):Ubuntu不能正常关机的解决方法
  14. spoj 1811 LCS 后缀自动机
  15. 笔记本电脑键盘失灵拯救方法总结
  16. 计算机光驱参数,光驱价格参数简介【图文】
  17. unity5.6.5适配Android P刘海屏,两侧去黑边
  18. 【明解C语言】之指针初阶详解
  19. linux Qt 复制文件至剪切板
  20. fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾

热门文章

  1. paddle 进行目标检测_猫狗猴的识别
  2. NLP学习—20.WMD paper及代码
  3. 6.5 XGBoost实战
  4. python基础3-运算符总结_位操作符_优先级问题
  5. [论文笔记]Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence
  6. RabbitMQ学习——基本概念
  7. 书单|互联网企业面试案头书之架构师篇
  8. 复旦大学肖仰华教授在线授课!从专家系统到知识图谱演进
  9. 什么平台给了社区站长机会
  10. 来自Comsenz产品团队的声音