使用kubeadm部署Kubernetes集群

实验环境准备

主机名	IP地址	   推荐配置
master	10.0.0.10  1C2G40G
node1	10.0.0.11  1C2G40G
node2	10.0.0.12  1C2G40G

系统环境准备(三台机器都需要)

配置host解析

cat >> /etc/hosts << EOF
10.0.0.10 master
10.0.0.11 node1
10.0.0.12 node2
EOF

关闭防火墙

systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager

关闭SELinux

setenforce 0
sed -i 's#SELINUX=disabled#SELINUX=disabled#g' /etc/selinux/config
getenforce

更新源路径为阿里源的路径

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/*.repo

确认网络畅通

ping www.baidu.com
ping master
ping node1
ping node2

配置时间同步

yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
date

关闭SWAP分区

swapoff -a
sed -i '/swap/d' /etc/fstab
free -h

1.安装部署kubeadm

kubeadm介绍

kubeadm是google推出的一种部署k8s集群的套件,他将k8s的组件打包封装成了容器,然后通过kubeadm进行集群的初始化。
kubeadm的好处是安装部署方便,缺点是不容易看到每个组件的配置,出了问题不好排查。

kubeadm部署前规划

节点规划

主机		节点			节点组件
master	master节点	API Server,controlle,scheduler,kube-proxy,kubelet,etcd
node1	node节点		Dokcer kubelet kube-proxy
node2	node节点		Dokcer kubelet kube-proxy

IP规划

POD IP		10.2.0.0
Cluster IP	10.1.0.0
Node IP		10.0.0.0

2.kubeadm部署前系统环境准备(默认所有节点都需要配置)

设置k8s禁止使用swap

cat > /etc/sysconfig/kubelet<<EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF

设置内核参数

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

加载IPVS模块

cat >/etc/sysconfig/modules/ipvs.modules<<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
source /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv

3.安装配置Docker

配置阿里源

cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast

安装指定版本的Docker

yum list docker-ce --showduplicates
yum -y install docker-ce-19.03.15 docker-ce-cli-19.03.15

配置docker镜像加速和cgroup驱动:

mkdir /etc/docker -p
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

启动Docker并设置开机自启动

systemctl enable docker && systemctl start docker

检查版本

docker -v

4.设置kubeadm的国内yum仓库

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

5.安装kubeadm

yum list kubeadm --showduplicates
yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3 ipvsadm

6.设置kubelet开机启动

systemctl enable kubelet

7.初始化集群(仅在master节点上执行)

初始化命令:

kubeadm init \
--apiserver-advertise-address=10.0.0.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.2.0.0/16 \
--service-dns-domain=cluster.local \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=NumCPU

参数解释:

--apiserver-advertise-address=10.0.0.11 #API Server的地址
--image-repository registry.aliyuncs.com/google_containers #镜像仓库地址,这里使用的是阿里云
--kubernetes-version v1.19.3 #安装的k8s版本
--service-cidr=10.1.0.0/16 #Cluster IP
--pod-network-cidr=10.2.0.0/16 #Pod IP
--service-dns-domain=cluster.local #全域名的后缀,默认是cluster.local
--ignore-preflight-errors=Swap #忽略SWAP检查不通过的警告
--ignore-preflight-errors=NumCPU #忽略CPU检查不通过的警告

这个步骤需要几分钟时间,执行完成后会有输出,这是node节点加入k8s集群的命令,需要自己保存下来

image.png

安装完提示执行命令,为kubectl准备kubeconfig

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

node节点加入集群命令(在所有node节点执行)

kubeadm join 10.0.0.10:6443 --token cg6iqq.8ny427duj6kdqiyv \
    --discovery-token-ca-cert-hash sha256:199efdfe811408687c9ca79a4fe62c25caa625f61ac0718d0a198729d1cead31

如果当时没保存这条命令,可以通过下面命令重新查看

kubeadm token create --print-join-command

加入集群后在master节点查看节点信息

kubectl get nodes

image.png

发现两个节点都已加入集群

8.设置kube-proxy使用ipvs模式(仅在master节点)

k8s默认使用的是iptables防火墙,可以修改为性能更高的ipvs模式
执行编辑命令,然后将第44行 mode: ""修改为mode: "ipvs"然后保存退出

kubectl edit cm kube-proxy -n kube-system

重启kube-proxy

kubectl -n kube-system get pod|grep kube-proxy|awk '{print "kubectl -n kube-system delete pod "$1}'|bash

查看pod信息

kubectl -n kube-system get pod|grep kube-proxy

检查IPVS规则

ipvsadm -Ln

9.部署Flannel网络插件(只在master节点上安装部署)

下载文件(由于github网站经常访问失败,所以不一定能执行成功)

git clone --depth 1 https://github.com/coreos/flannel.git

修改配置文件,将128行替换为PodIP,在189行新增加一行指定网卡名

cd flannel/Documentation/
vim kube-flannel.yml    
128:      "Network": "10.2.0.0/16",
189:        - --iface=eth0

应用资源配置清单

kubectl apply -f kube-flannel.yml

检查pod运行状态,等一会应该全是running

kubectl get pod -n kube-system

image.png

检查节点状态,应该都是Ready

kubectl get nodes

image.png

10.给node节点打标签

kubectl label nodes node1 node-role.kubernetes.io/node=
kubectl label nodes node2 node-role.kubernetes.io/node=

打完标签查看节点状态

image.png

优化项:支持命令补全-只要master执行

yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
kubectl completion bash >/etc/bash_completion.d/kubectl
posted @ 2022-03-02 21:22  Nicki60  阅读(278)  评论(0)    收藏  举报