你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

部署kubernetes集群

2021/12/31 22:03:30

使用kubeadm 部署kubernetes集群

初始环境

关闭selinux、firewalld
环境说明:
IP 主机名 角色 内存 cpu
27 node27 master 8G 6C
37 node37 worker 8G 6C
47 node47 worker 8G 6C

配置hosts文件

vim /etc/hosts
192.168.34.27 node27
192.168.34.37 node37
192.168.34.47 node47

配置主机之间免密登录

ssh-keygen
ssh-copy-id node37
ssh-copy-id node47

关闭交换分区

swapoff -a
vim /etc/fstab
注释掉开机自动挂载swap

内核参数修改

modprobe br_netfilter && lsmod | grep br_netfilter
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 -p /etc/sysctl.d/k8s.conf

tips:
为什么要开启ip_forward
如果容器的宿主机上的ip_forward未打开,那么宿主机上的容器则不能被其他的宿主机访问
为什么要开启net.bridge.bridge-nf-call-ip6tables
默认情况下,从容器发送到默认网桥的流量,并不会被转发到外部。要开启转发: net.bridge.bridge-nf-call-ip6tables = 1
为什么要加载br_netfilter模块?

在执行sysctl -p 是出现报错的解决办法 即加载br_netfilter模块

配置阿里云docker源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置离线的yum源

tar xf k8s-docker.tar.gz -C /opt
tee /etc/yum.repos.d/k8s-docker.repo << 'EOF'
[k8s-docker]
name=k8s-docker
baseurl=file:///opt/k8s-docker
enable=1
gpgcheck=0
EOF

配置阿里云安装k8s和docker需要的repo源
配置阿里云kubernetes yum源

tee /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
EOF

复制yum源到节点上

scp /etc/yum.repos.d/kubernetes.repo node37:/etc/yum.repos.d/
scp /etc/yum.repos.d/kubernetes.repo node47:/etc/yum.repos.d/

基础软件包

yum install -y yum-utils wget vim net-tools nfs-utils libxml2-devel openssl-devel curl curl-devel unzip ntp ncurses-devel zlib-devel epel-release socat ipvsadm conntrack ntpdate

配置服务器时间同步

ntpdate cn.pool.ntp.org
crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

开启ipvs
不开启ipvs将会使用iptables,但是效率低,所以官网推荐需要开通ipvs内核
把ipvs.modules上传到node27的/etc/sysconfig/modules/目录下(需要用的ipvs.modules)

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

安装docker-ce

yum install docker-ce docker-ce-cli container.io -y
systemctl start docker && systemctl enable docker

优化docker

tee /etc/docker/daemon.json <<'EOF'
{"registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com"],"exec-opts":["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload && systemctl restart docker

tips:
为什么要指定native.cgroupdriver=systemd?
在安装kubernetes的过程中会出现,文件驱动默认由systemd改成cgroupfs,而我们安装的docker使用的文件驱动时systemd造成不一致,导致镜像无法启动,可以使用docker info查看,在daemon.json中加入native.这段内容,重启docker即可。
安装初始化k8s需要的组件:
在master和worker上安装kubeadm组件,用于后期安装k8s使用,现在还没有安装k8s。

yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4
systemctl enable kubelet

kubelet的作用是运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm的作用是用于初始化集群,启动集群的命令工具
kubectl是用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源、创建、删除和更新各种组件。

初始化集群

每台机器上导入一下镜像(需要用到的镜像)

docker load -i k8s-images-v1.20.4.tar.gz
gzip -dc k8s-images-v1.20.4.tar.gz | ssh root@node37 'cat | docker load'

使用kubeadm初始化k8s集群

kubeadm init --kubernetes-version=1.20.4 --apiserver-advertise-address=192.168.34.27 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification

tips: --image-repository registry.aliyuncs.com/google_containers为保证拉取镜像不到国外站点拉取,手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm默认从k8ss.grc.io拉取镜像。我们本地有导入的离线镜像,所以会优先使用本地的镜像。

安装完成,我们保存节点注册命令稍后向集群加入节点的时候需要用到。
配置kubectl的配置文件,保存一个证书,这样kubectl命令就可以使用这个证书对k8s集群进行管理了。
上一篇
下一篇