kubeadm部署K8s集群
Kubeadm 是一个提供了 kubeadm init 和 kubeadm join 的工具,作为创建Kubernetes 集群的“快捷途径” 的最佳实践。 kubeadm 通过执行必要的操作来启动和运行最小可用集群。 按照设计,它只关注启动引导,而非配置机器
环境准备
终端 xhell 7
OS centos7.9
规划如下
主机名 | IP | gateway | CPU | 内存 |
---|---|---|---|---|
master | 192.168.236.40 | 192.168.236.2 | 2核4G | 30G |
node01 | 192.168.236.45 | 192.168.236.2 | 1核2G | 40G |
node02 | 192.168.236.46 | 192.168.236.2 | 1核2G | 40G |
node03 | 192.168.236.47 | 192.168.236.2 | 1核2G | 40G |
基本配置(针对所有节点)
1.更换软件源
默认的centos的源比较慢,因此我们可以选择更换成阿里的镜像源,也可以配置阿里的镜像源加速
#先下载wget命令
[root@master ~]# yum install -y wget
#备份原有的repo源
[root@master ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的repo源(centos7)
[root@master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#生成新的缓存
[root@master ~]# yum makecache
#检查是否配置成功
[root@master ~]# yum -v repolist |grep aliyun
2.安装systemctl自动补全命令插件
[root@master ~]#yum -y install bash-completion
3.修改主机名
根据上面的规划,将每个主机的主机名对应修改
[root@master ~]#hostnamectl set-hostname matser(对应着不同的主机名)
4.针对k8s集群安装部署的基本配置
#关闭防火墙
[root@master ~]# systemctl stop firewalld.service &&systemctl disable firewalld.service
#关闭selinux
[root@master ~]# setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#关闭swap交换内存
[root@master ~]# cp /etc/fstab /etc/fstab.bak #备份,防止操作出错
[root@master ~]# swapoff -a && sed -i 's/^[^#].*swap*/#&/g' /etc/fstab #关闭swap
*** sed -i 's/^[^#].*swap*/#&/g' /etc/fstab解释 ***
sed 是一种在线编辑器,它一次处理一行内容,-i选项可以直接修改文件内容,
s/string1/string2/g: 表示将匹配到的string1替换成string2
^[^#].*swap*:正则表达式,表示匹配以 非# 开头的 含有swap字符串 的字符串
#&:#是我们需要添加的注释标记,&代表sed在上次匹配成功的字符串
***
#添加ip和主机之间的映射关系
[root@master ~]# cat >> /etc/hosts << EOF
> 192.168.236.40 master
> 192.168.236.45 node01
> 192.168.236.46 node02
> 192.168.236.47 node03
> 199.232.68.133 raw.githubusercontent.com #防止之后的flanner资源清单获取失败
> EOF
#打开ipv6流量转发
[root@master ~]# cat > /etc/sysctl.d/k8s.conf << EOF
> net.ipv4.ip_forward = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@master ~]# sysctl --system #使ipv6转发功能立即生效
#同步时间
如果时间不同步,需要同步时间
1.安装ntpdate
[root@master ~]#yum -y install ntpdate
2.同步时间
[root@master ~]#ntpdate -u pool.ntp.org
3.检查是否同步
[root@master ~]#date
5.安装必要的软件
#安装vim,lrzsz
[root@master ~]# yum install -y vim lrzsz
#安装docker-ce
1.安装必要的依赖
[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2.配置docker-ce的repo源
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker-ce
[root@master ~]# yum -y install docker-ce
4.启动docker并设置开机自启
[root@master ~]# systemctl start docker && systemctl enable docker
5.查看docker版本
[root@node03 ~]# docker -v
#安装kubernetes及相关服务
1.添加kubernetes的阿里repo源
[root@master ~]# cat > /etc/yum.repos.d/kubernetes.repo << EOF
> [kubernetes]
> name=Kubernetes
> baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
> enabled=1
> gpgcheck=0
> repo_gpgcheck=0
> gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF
2.列出可供下载的版本,选择安装
[root@master ~]# yum list kubeadm --showduplicates
3.我们这里选择1.19.4,安装kubectl/kubeadm/kubelet (matser节点全部安装 node节点不需要安装 kubectl)
[root@master ~]# yum install -y kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4
4.设置kubelet开机自启
[root@master ~]# systemctl enable kubelet
配置master节点
使用kubeadm init 初始化master节点
[root@master ~]# kubeadm init \
--apiserver-advertise-address=192.168.236.40 \ #对应master的ip地址
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ #默认是k8s的站点,很慢 建议将其换成阿里云
--kubernetes-version v1.19.4 \ #对应之前下载的版本号
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 #代表使用flannel
当出现如下界面时,则代表master初始化成功
根据提示执行对应操作
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
安装pod网络插件(CNI)
可以选择通过网络去下载flannel镜像,但是对网速限制很大。想使用该方法的可以通过百度去获取
因为网络问题,在这里我选择通过导入原有的flannel镜像文件
1.导入flannel镜像压缩包
[root@master ~]# docker load < flannel-0.12.0.tar
2.查看镜像
[root@master ~]# docker images |grep flannel
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 10 months ago 52.8MB
3.下载flannel配置文件
[root@master ~]# curl -o kube-flannel.yml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4.修改配置文件镜像
[root@master ~]# sed -i 's/flannel:v0.13.1-rc1/flannel:v0.12.0-amd64/g' kube-flannel.yml
5.创建flannel服务
[root@master ~]# kubectl apply -f kube-flannel.yml
6.检查是否创建成功 需要等待一会,之后变成Running状态则成功
[root@master ~]# kubectl get pod -n kube-system | grep kube-flannel
node节点加入集群
1.在node上安装flannel
[root@node01 ~]# docker load < flannel-0.12.0.tar.gz
2.node加入集群 使用之前的认证命令
[root@node01 ~]#kubeadm join 192.168.236.40:6443 --token 1t9axt.e4d5x22mokupxh72 \
--discovery-token-ca-cert-hash sha256:b7e2b05523ca6de4faf4db8fbccca7fa26a92e67df15ddb7a7a73b732ae0e0be
当显示如下界面时,代表加入成功
3.之后在master节点上面检查是否成功
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready master 90m v1.19.4
node01 Ready <none> 90s v1.19.4
node02 Ready <none> 90s v1.19.4
node03 Ready <none> 90s v1.19.4
此时代表node节点已经处于就绪状态
4.检查组件状态信息
[root@master ~]# kubectl get cs
发现组件unhealthy, 并报错,如下图所示
此时,我们需要修改 /etc/kubernetes/manifests/下面对应的yaml文件
kube-controller-manager.yaml kube-scheduler.yaml
将里面的 --port=0 去掉,保存退出即可,过一会便会显示Healthy状态
*小技巧 kubectl 命令自动补全
[root@master ~]# source <(kubectl completion bash)
[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc