文档 · 2021年5月7日 0

kubeadm方式安装kubernetes集群

本次k8s的安装使用三个节点,包括一个控制节点master-01和两个计算节点node-01/02,不介绍如何扩容master节点操作,安装前请确认master节点机器cpu核数 >= 2核,内存 >= 4G,node节点随意。

一 .环境准备:
主机名
master-01
node-01
node-02
系统
centos 7
centos 7
centos 7
内核版本
5.12.0-1.el7.elrepo.x86_64
5.12.0-1.el7.elrepo.x86_64
5.12.0-1.el7.elrepo.x86_64
配置
2C4G
1C2G
1C2G
基本组件分布
kubeadm:v1.21.0

kubelet:v1.21.0

kubectl:v1.21.0
kubeadm:v1.21.0

kubelet:v1.21.0
kubeadm:v1.21.0

kubelet:v1.21.0
runtime(运行时)
docker 20.10.6
docker 20.10.6
docker 20.10.6
二.安装前基本的准备工作:
1、所有节点系统内核版本在5.10以上。centos7 默认系统内核为3.10或其他版本,因为我们安装k8s需要使用IPVS组网,依赖内核版本较高,所以建议升级内核至最新内核版本即可。内核升级步骤如下:
#检查当前内核版本:
[root@master-01 ~]# uname -a
Linux master-01 5.12.0-1.el7.elrepo.x86_64 #1 SMP Sun Apr 25 17:27:47 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

#我的已经升级好了所以显示是5.12,如果未升级的朋友可以参照以下方法升级:
#1.导入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

#2.安装Elrepo
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

#3.检查可用的内核版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

#4.卸载当前的内核工具
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y

#5.安装最新的内核版本
yum --enablerepo=elrepo-kernel install kernel-ml

#6.替换grub引导至新内核启动
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 0

#7.重启即可
reboot

#重启完成后使用 uname -a 查看当前内核版本
2、所有节点修改内核参数文件
#编辑/etc/sysctl.conf
vim /etc/sysctl.conf

vm.swappiness = 0
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1

#追加写入以上内容:
#保存退出后执行 sysctl -p 使配置生效
#执行sysctl -p 时出现
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

#解决办法加载br_netfilter模块
modprobe br_netfilter
3、所有节点禁止使用swap交换空间
#1.关闭swap交换空间:
swapoff -a

#2.注释掉/etc/fstab 下的swap自动挂载

4、所有节点安装IPVS
#1.检查当前的版本,我自己装的系统默认不带所以返回的是命令未找到。如果已经安装了并且查到版本号,可以省略安装步骤。
ipvsadm --version

#2.未查到版本号的朋友,参考这里进行安装
yum install ipvsadm ipset sysstat conntrack libseccomp -y

#3.修改配置文件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp ip_vs_sh nf_conntrack ip_tables ip_set xt_set ipt_set ipt_rpfilter ipt_REJECT ipip"
for kernel_module in \${ipvs_modules}; do
/sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe \${kernel_module}
fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
5、所有节点之间可以正常通信,并且提供访问公网的权限。互相增加免密认证(这步可以忽略,不影响后续安装)
#1.在其中一台服务器上生成公钥和私钥;一路回车就可以
 ssh-keygen -t rsa

#2.将生成的id_rsa 和 id_rsa.pub 导出到本地保存起来所有服务器分别创建文件夹;
mkdir -p /root/.ssh && touch authorized_keys && chmod 700 /roor/.ssh && chmod /root/.ssh/authorized_keys

#3.将id_rsa.pub 里面的内容复制到 authorized_keys 里面,将id_rsa 导入到每台服务器的/root/.ssh/目录中

#4修改/etc/hosts 对应IP地址 及主机名

6、所有节点全部都要安装runtime 也就是docker,版本的话尽量用最新的稳定版就可以了。
#1.导入docker-ce.repo源文件
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#2.安装docker 
yum install -y docker-ce

#3.检查docker 版本
docker version

#4.启动并加入开机自启动
systemctl enable docker
systemctl start docker

#5.添加修改配置文件,配置了阿里源文件,修改了存储形式和启动控制器
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://zv23saf9.mirror.aliyuncs.com","https://10.12.25.25:8443"],
"insecure-registries": ["registry-pre.gw-greenenergy.com:8443"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]

}

#6.重启docker
systemctl restart docker

7、所有节点禁用selinux,关闭防火墙,更新系统软件版本并重启;
#关闭并禁止防火墙开启
systemctl stop firewalld
systemctl disable firewalld

#禁止selinux
sed -i 's/SELINUX=enforced/SELINUX=disabled/g' /etc/selinux/config

#更新系统环境补丁
yum upgrade -y     ###云服务器,虚拟机慎用,请提前进行备份或者快照

#重启
reboot
三.开始安装Master:

1、安装基础组件,可以参照文章头部表格组件进行对应节点的组件安装。

#1.所有节点导入kubernetes源文件。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#2. 在Master 节点安装组件,设置开机启动:
yum install kubelet kubeadm kubectl -y
systemctl enable kubelet
systemctl start kubelet

#3.在Master 节点检查集群需要的组件
kubeadm config images list --kubernetes-version v1.21.0

#4.在Master 节点手动下载coredns,因为阿里云没有
docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0

#5.在Master节点,使用kubeadm 安装集群,指定阿里镜像源(集群初始化)
kubeadm init --kubernetes-version=v1.21.0 --apiserver-advertise-address=192.168.57.20 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --v=5

# --kubernetes-version=v1.21.0  指定集群版本
# --apiserver-advertise-address=192.168.57.20 指定Master节点IP地址
# --image-repository registry.aliyuncs.com/google_containers 指定镜像源地址
# --pod-network-cidr=10.100.0.0/16 指定pod容器内部网络可用的网段,随意指定即可,尽量避免与内网冲突。
# --service-cidr=10.200.0.0/16 指定集群内部管理的网段,不能和pod网段重叠。
# --v=5  日志级别


###安装报错可能是因为启动控制器报错,kubelet 建议统一使用systemd 控制器启动,需要修改一下配置文件
 
vim /var/lib/kubelet/config.yaml 
... 
cgroupDriver: systemd 
... 
###cgroupDriver: 的值修改为systemd 

###   /var/lib/kubelet/config.yaml  只有kubeadm init 时才会生成,所以刚安装完的kubelet 可能无法正常启动,不用担心。

#重启kubelet 
systemctl restart kubelet

7.如果第 5 步kubeadm init ... 报错,重新初始化集群前需要进行重置.
kubeadm reset

#重置后继续进行第 5 步

###安装成功的话会提示第六步的命令,以及生成一个纳管节点的命令,该命令24小时内可以使用。

#6.在Master节点,安装kubectl 命令行工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#7.在Master节点,安装flannel网络组件:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#编辑下载好的kube-flannle.yml 修改Network部分,改成你kubeadm init 是指定的--pod-network-cidr 

net-conf.json: |
{
"Network": "10.100.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
修改后保存,根据yml创建flannel

kubectl apply -f kube-flannle.yml

#检查组件状态
kubectl get po -A -o wide

###到这里Master节点的操作基本完成了。

2、添加node节点

在上步中已经完成了kubernetes 源文件的导入,本过程直接安装对应组件

#1.在node-01/02 安装组件
yum install -y kubeadm kubelet -y


#2.纳管Node-01/02 #复制Master节点初始化生成的kubeadm join 命令执行 

kubeadm join 192.168.57.20:6443 --token cvuf85.44rnkllt7i90aj43 --discovery-token-ca-cert-hash sha256:af0a7a03801cfc61da51cb07eba025f2df83926e0ce65ce53fa7ee53adde49a1 

# 192.168.57.20:6443 Master节点apiserver地址 默认端口6443

###安装完了kubelet 后需要统一使用systemd 控制器启动,需要修改一下配置文件 
vim /var/lib/kubelet/config.yaml 
... 
cgroupDriver: systemd 
... 
### cgroupDriver: 的值修改为systemd


增加节点操作重复以上增加node节点步骤即可。
3、基本操作命令:
#1.查看集群组件状态:
kubectl get cs

#2.查看所有pod组件, -o wide 展示详细信息,可以不加
kubectl get pod -A
或
kubectl get pod -A -o wide

#3.查看运行状态日志
kubectl describe pod/coredns-545d6fc579-gjs8h -n kube-system

4、集群组件检查失败,现象如下图

解决办法:

编辑Master 节点以下两个文件将  –port = 0 删除即可

vim /etc/kubernetes/manifests/kube-controller-manager.yaml
vim /etc/kubernetes/manifests/kube-scheduler.yaml
四.安装Dashboard默认图形化工具:
#1.下载官方yml文件
wget http://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

#2.应用yml文件,创建pod
kubectl create -f recommended.yaml

#3.创建登录token
kubectl create serviceaccount dashboard-admin -n kube-system

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

#4.获取登录token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

#5.修改访问方式为nodeport方式
kubectl edit svc/kubernetes-dashboard -n kubernetes-dashboard

格式如下图: dashboard_svc

#6.保存退出会自动重启pod. 检查pod 状态
kubectl get po -A | grep dashboard

#状态正常即可

图: dashboard_svc

访问 Dashboard:

https://192.168.57.20:31000    这里一定用https方式访问;

打赏