kubeadm在线部署k8s集群
kubeadm方式在线部署k8s集群
写在前面:
docker与kubelet一定要设置开机自启并启动,如果内核版本过低,建议有必要升级内核版本
内核升级链接
https://blog.csdn.net/xhredeem/article /details/127884189?spm=1001.2014.3001.5501
第一步:环境准备
每台机器都做
至少2cpu,4g机器环境
关闭防火墙、关闭selinux、关闭交换分区
(1)关闭selinux,设置为disabled
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
(2)关闭交换分区
修改配置文件/etc/fstab文件配置,注释 swap的挂在命令行,永久有效。
使用swapoff -a 命令仅临时有效,重启失效,需要手动修改配置文件。
(3)关闭防火墙
systemctl disable firewalld 禁止防火墙开机自启
systemctl stop firewalld 关闭防火墙服务
Systemctl status firewalld 查看防火墙服务
(4)修改主机名及/etc/hosts文件作为名称解析(所有节点都操作)
192.168.1.11 master-0001
192.168.1.12 node-0001
192.168.1.13 node-0002
(5)所有节点设置kube-proxy开启ipvs的前置条件
yum -y install ipvsadm ipset
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
第二步:配置yum源
配置系统yum源 每台机器都做
将系统默认的yum源文件repo移动到新目录bak下,执行下面的wget命令下载新的配置文件:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
配置k8s源 每台机器都做(此处是华为云的源,可能需要手动添加$basearch)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://repo.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://repo.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://repo.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
配置docker源 每台机器都做
wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
执行命令生成yum缓存
yum clean all
yum makecache
第三步:配置系统内核参数 每台机器都做
修改文件/etc/sysctl.conf
cat <<EOF>/etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.forwarding = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
执行下面的命令使其生效:
modprobe br_netfilter;sudo sysctl -p /etc/sysctl.conf
第四步:同步时间 每台机器都做
yum install ntpdate -y
ntpdate time.windows.com
或ntpdate ntp1.aliyun.com
第五步:安装docker-ce 并设置开机自启每台机器都做
yum -y install docker-ce;systemctl enable docker.service --now
第六步:创建和编辑/etc/docker/daemon.json文件
- 配置国内镜像源或加速,这里例子是使用163加速,不过建议去阿里官方申请自己的镜像加速地址,免费的
- 修改docker Cgroup Driver为systemd
创建文件:
cat <<EOF >/etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
EOF
(4)使得/etc/docker/daemon.json文件配置生效。
systemctl daemon-reload;systemctl restart docker
通过命令docker info查看
第七步:安装k8s工具、部署k8s快捷键、并查看版本 每台机器都做
查看可用的kubeadm版本,这里不太建议最新版
yum list --showduplicates kubeadm
我选择的是这个版本
yum -y install kubeadm-1.19.16 kubectl-1.19.16 kubelet-1.19.16
部署k8s快捷键
kubectl completion bash >/etc/bash_completion.d/kubectl;kubeadm completion bash >/etc/bash_completion.d/kubeadm
第八步:K8s中的master主机初始化
查看初始化集群需要哪些镜像
kubeadm config images list
使用脚本拉取镜像,脚本内容如下(根据需要修改版本即可)
vim k8s.images.pull.sh
images=(
kube-apiserver:v1.19.16
kube-controller-manager:v1.19.16
kube-scheduler:v1.19.16
kube-proxy:v1.19.16
pause:3.2
coredns:1.7.0
etcd:3.4.13-0
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
执行脚本
bash k8s.images.pull.sh
脚本执行后,使用命令查看,发现需要镜像已经全部拉取
初始化init配置(master 节点执行)
kubeadm init --kubernetes-version=v1.19.16 --apiserver-advertise-address=192.168.1.11 --image-repository k8s.gcr.io --pod-network-cidr=10.244.0.0/16 --upload-certs --v=5
解析:
apiserver-advertise-address=192.168.1.11 这里的IP地址是master的地址。
pod-network-cidr=10.244.0.0/16 这里的IP地址是pod节点之间的地址。
image-repository k8s.gcr.io 这个是镜像地址
如何上述命令执行成功,会在最后显示如下:
在master上根据提示内容执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
最后、把node节点加入Kubernetes
node节点需要pause、kube-proxy两个镜像(修改镜像拉取脚本只拉取这两个镜像就行)
在每个node主机上执行下面的命令(根据具体值操作,因为hash值会变化):
忘记加入命令可以在master节点查看
[root@master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.1.11:6443 --token ynjq33.om7q0fuweph403xf \
--discovery-token-ca-cert-hash sha256:770cf2296bd6ed1e33723a076d0ea928b92ac81b6be2dc114a0e7687267016ad
在master上查询节点是否加入(此时三个节点状态都是NotReady,是因为没有部署网络插件flannel或者calico)
修改节点标签
[root@matser-0001 ~]# kubectl label nodes node-0001 node-role.kubernetes.io/node-0001=
[root@matser-0001 ~]# kubectl label nodes node-0002 node-role.kubernetes.io/node-0002=
使用flannel网络插件
获取下面这个文件并上传到本地(如果下载不了,可以复制内容并粘贴)
https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
此时查看所有节点状态都已经是好的(到此基本集群已经部署完毕)
更多推荐
所有评论(0)