一、实验环境
系统版本:CentOS7.6
内核版本:3.10.0-957.el7.x86_64
kubernetes版本:1.23.6
docker版本:docker-ce-20.10.9-3.el7
角色 IP地址 节点主机名 硬件配置 系统 master 172.17.0.41 master01 4c4g CentOS7.6 master 172.17.0.42 master02 4c4g CentOS7.6 node 172.17.0.31 slave01 4c4g CentOS7.6 node 172.17.0.32 slave02 4c4g CentOS7.6
二、 配置hosts信息(全部节点都要操作)
cat >> /etc/hosts <
三、修改主机名
master01
hostnamectl set-hostname master01
master02
hostnamectl set-hostname master02
node01
hostnamectl set-hostname slave01
node02
hostnamectl set-hostname slave02
四、修改 .bashrc 环境变量(全部节点都要操作)
cat > .bashrc <
五、内核优化(全部节点都要操作)
cat > /etc/sysctl.conf<
# 添加需要开启自动加载内核模块
echo 'modprobe ip_conntrack' >> /etc/profile echo 'modprobe br_netfilter' >> /etc/profile source /etc/profile sysctl -p
六、优化文件打开数(全部节点都要操作)
cat >> /etc/security/limits.conf <
七、关闭防火墙和关闭安全子系统(全部节点都要操作)
# 禁用防火墙
systemctl stop firewalld && systemctl disable firewalld
# 临时禁用selinux
setenforce 0
# 永久修改,重启服务器后生效
sed -i '/^enforcing=/s/enforcing=.*/enforcing=disabled/' /etc/selinux/config
八、安装ipvs(全部节点都要操作)
# 创建脚本
cat > /etc/sysconfig/modules/ipvs.modules < /dev/null 2>&1
if [ 0 -eq 0 ]; then
/sbin/modprobe \${kernel_module}
fi
done
EOF
# 执行并检查
chmod +x /etc/sysconfig/modules/ipvs.modules && \
/etc/sysconfig/modules/ipvs.modules && \
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
# 安装ipset和ipvsadm(便于查看 ipvs 的代理规则)
yum -y install ipset ipvsadm
九、安装 时间同步服务(全部节点都要操作)
yum -y install chrony
# 修改配置文件
sed -i.bak '3,6d' /etc/chrony.conf && \
sed -i '3cserver ntp1.aliyun.com iburst' /etc/chrony.conf
# 启动并设置开机自启
systemctl start chronyd && systemctl enable chronyd
# 查看同步结果
[root@master01 16:28:41~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 120.25.115.20 2 10 332 51m +176us[ +259us] +/- 4782us
[root@master01 16:28:52~]#
十、关闭swap分区(全部节点都要操作)
# 关闭开机自启 sed -i '/swap/s/^/#/' /etc/fstab
十一、重启服务器(全部节点都要操作)
init 6
十二、安装docker(全部节点都要操作)
1、安装yum资源库管理命令
yum -y install yum-utils
2、添加阿里云yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、查看可用版本
yum list docker-ce --showduplicates | sort -r
4、安装20.10.9-3.el7
yum -y install docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7
5、配置阿里云docker镜像加速
mkdir -p /etc/docker/ cat > /etc/docker/daemon.json <
6、修改docker Cgroup Driver为systemd
# 将/usr/lib/systemd/system/docker.service文件中的这一行 # ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock # 修改为 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd # 如果不修改,在添加 worker 节点时可能会碰到如下错误 # [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The # recommended driver is "systemd". # Please follow the guide at https://kubernetes.io/docs/setup/cri/ # 使用如下命令修改 sed -i.bak "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
7、启动docker并设置开机自启
systemctl daemon-reload && \ systemctl restart docker && \ systemctl enable docker
8、验证信息
docker info
版本信息确认
阿里云镜像加速确认
十三、安装Kubeadm(全部节点都要操作)
1、使用阿里云的yum源
cat >/etc/yum.repos.d/kubernetes.repo <
2、安装 kubeadm、kubelet、kubectl
yum -y install kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
3、查看版本信息
4、设置开机自启
systemctl enable kubelet
5、配置k8s命令和参数tab自动补全
yum -y install bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
十四、初始化集群(只在master01上操作)
1、配置 kubeadm 初始化文件
cat > ./kubeadm-config.yaml <
2、初始化master
kubeadm init --config=kubeadm-config.yaml --upload-certs
# 注意,这步不用操作,如果发现需要重新改配置文件,重新初始化master,则执行这步
kubeadm reset -f kubeadm-config.yaml
3、按提示要求操作,直接复制操作就行了
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
十五、添加master节点(只在master02上操作)
1、从master01复制所需要的配置文件过master02上
mkdir -p $HOME/.kube
scp master01:/root/.kube/config $HOME/.kube
chown $(id -u):$(id -g) $HOME/.kube/config
2、master节点添加,复制这段来添加
3、等待执行完成,查看结果
kubectl get node
十六、添加node节点(只在slave01和slave02上操作)
1、从master01复制所需要的配置文件过node节点上(这步可以不操作,只是为了方便node节点可以想master节点一样,可以执行kubectl命令操作)
mkdir -p $HOME/.kube
scp master01:/root/.kube/config $HOME/.kube
chown $(id -u):$(id -g) $HOME/.kube/config
2、node节点添加,复制这段来添加
3、复制到slave01和slave02节点上执行命令
十七、安装网络插件
1、下载yaml文件,官网地址:Project Calico DocumentationHomehttps://projectcalico.docs.tigera.io/
wget https://docs.projectcalico.org/v3.21/manifests/calico.yaml --no-check-certificate
2、修改配置文件
vim calico.yaml
搜索关键字:CALICO_IPV4POOL_CIDR,打开注释(删除#号和一个空格)
修改成如下,要对齐上面的#号,value里的变量填写为第 十四 步骤里的 kubeadm-config.yaml 中 podSubnet 变量一致
3、执行
kubectl apply -f calico.yaml
4、等待一会,检查pod安装情况
kubectl get pod -n kube-system
5、全部状态为Running时,再检查节点情况,节点的状态全部为Ready就正常了
kubectl get node
十八、配置storageclass动态存储,实现k8s自动管理PV,这里用的是nfs做存储后端
1、安装 nfs-utils 和 socat 依赖包(全部节点都要操作)
yum -y install nfs-utils socat
2、master01 节点安装 rpcbind 服务,这里用 master01 作为nfs服务端
yum -y install rpcbind
# 创建目录并修改权限
mkdir -p /data/software/nfs_data
chmod 777 /data/software/nfs_data
# 编辑配置文件
cat >/etc/exports <
3、配置storageclass的yaml文件,注意修改nfs服务端IP和共享目录
cat > storageclass.yaml <
4、创建storageclass
kubectl apply -f storageclass.yaml
5、设置自动创建PVC(strorageclass)时默认选择nfs-storage
kubectl patch storageclass nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
6、检查情况,查看nfs-storage是否带有default字样
kubectl get sc
7、检查nfs-client pod状态
kubectl get pods
8、创建pvc测试看看storageclass是否生效
cat > pvc-test.yaml <
9、查看创建的PVC ,状态为Pending不正常
9、查看nfs-client pod日志,kubectl logs -n nfs-data 之后用tab键来补全
kubectl logs -n nfs-data #tab键来完成后续的补全pod名称
kubectl logs -n nfs-data nfs-provisioner-6d457c6f8d-wn4wq
检查发现全部显示的都是该类报错 ,查询到官网的git说明:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/issues/25https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/issues/25
10、修改/etc/kubernetes/manifests/kube-apiserver.yaml解决问题(master节点都要添加,这里添加节点有 master01 和 master02)
添加内容
- --feature-gates=RemoveSelfLink=false
11、等待一会,返回第 9 步骤,查看PVC的状态,如果状态为Bound就正常了,按理来说 kubeadm 部署的k8s是不需要执行以下操作的,如果为了以防万一,可以执行下面操作
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml # 执行两次操作
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
12、如果执行了 11 步操作,要查看pod的状态,如果看多于的pod的,kube-apiserver的pod是带有后缀为主机名的,不是就是多余的
kubectl get pod -n kube-system
13、删除多余的pod
kubectl delete -n kube-system pods kube-apiserver
14、再次查看PVC状态,如果状态为Bound就正常了
kubectl get pvc
15、如果PVC还是不正常,可以删掉再重新创建,还是不行就只能重新开始创建storageclass
kubectl delete -f pvc-test.yaml
kubectl apply -f pvc-test.yaml
16、查看存储介质情况,多了一些东西在里面
[root@master01 14:32:26/data/recycle]# ls /data/software/nfs_data/
default-pvc-test-pvc-f350362e-b69b-4b20-84f4-0f77f1264f91
[root@master01 14:32:35/data/recycle]#
十九、部署KubeSphere,官方地址:在 Kubernetes 上最小化安装 KubeSphere了解在现有 Kubernetes 集群上如何使用最小安装包安装 KubeSphere。您可以使用托管在云服务器上或者安装在本地的 Kubernetes 集群。https://kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/
1、下载yaml文件
wget https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/kubesphere-installer.yaml
wget https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/cluster-configuration.yaml
2、创建 KubeSphere 相关pod
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
3、查看安装log,直到出现账号密码提示
kubectl logs -n kubesphere-system \
$(kubectl get pod \
-n kubesphere-system \
-l app=ks-install \
-o jsonpath='{.items[0].metadata.name}') -f
4、确认pod状态情况
kubectl get pod -n kubesphere-system
5、登陆网页,
url: http://172.17.0.41:30880
账号: admin
密码: P@88w0rd