夜间模式暗黑模式
字体
阴影
滤镜
圆角
主题色
Kubernetes v1.21.0集群搭建(centos8)

本博客参考自kubernetes中文社区,将其中踩坑的地方做了一些修改。

服务器准备

列表中是6台cenots8的服务器(根据你的集群而定你也可以准备3台服务器),保证服务器之间相互可以ping通,关闭防火墙(如果不关闭防火墙可以在防火墙中写上服务器之间访问的策略,以及开放的对应端口),时间同步(ntpd),可以连接互联网。

hostnameip
node110.134.11.101
node210.134.11.102
node310.134.11.103
node410.134.11.104
node510.134.11.105
node710.134.11.107

配置hosts文件,所有服务器操作。

vim /etc/hosts
10.134.11.101	node1
10.134.11.102	node2
10.134.11.103	node3
10.134.11.104	node4
10.134.11.105	node5
10.134.11.106	node6
10.134.11.107	node7

修改hostname,所有服务器操作。

vim /etc/hostname
node1

配置阿里yum源,所有服务器操作。

#删除所有系统自带的信源
rm -rf /etc/yum.repos.d/*

#下载阿里yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

#centos7的话 Centos-8.repo 改成 Centos-7.repo 就好。

#清除yum原来的缓存
yum clean all

#重新加载yum源
yum makecache

关闭swap ,所有服务器操作。

#关闭swap分区
swapoff -a

#关闭swap(永久生效)
vim /etc/fstab
注释swap的一行

开启bridge-nf(默认是关闭的),使得netfilter可以对Linux网桥上的IPv4/ARP/IPv6包过滤。将桥接的IPv4、IPv6流量传递到iptables的链上。

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

解释上述参数的含义:
#是否在ip6tables链中过滤IPv6包
net.bridge.bridge-nf-call-ip6tables

#是否在iptables链中过滤IPv4包
net.bridge.bridge-nf-call-iptables

注:上述不配置容易导致pods之间网络不通。

依赖包安装

yum install vim bash-completion net-tools gcc yum-utils device-mapper-persistent-data lvm2 -y 

kubernetes组件安装

docker安装

#添加阿里源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装docker
yum -y install docker-ce

安装过程中会出现containerd.io版本的问题 (centos7安装忽略不会出现下列问题)

解决方式如下:

#下载centos7 containerd.io的包
wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

#安装
yum install containerd.io-1.2.6-3.3.el7.x86_64.rpm

#卸载
yum remove containerd.io-1.2.6-3.3.el7.x86_64.rpm

#下载centos8 containerd.io的包
wget https://download.docker.com/linux/centos/8/x86_64/edge/Packages/containerd.io-1.3.7-3.1.el8.x86_64.rpm

#安装
yum install containerd.io-1.3.7-3.1.el8.x86_64.rpm

#安装docker
yum -y install docker-ce

#设置docker开机启动
systemctl enable docker

这里比较迷的操作就是必须要把centos7中的containerd.io安装完,在卸载了在安装centos8中的containerd.io,安装docker才不会报错,原因可能是其中有些依赖的底层包(我的6台服务器都需要这样操作才行)。

安装kubectl、kubelet、kubeadm (如果其他节点不操作kubectl的命令,可以只在主节点安装kubectl命令)

#添加阿里kubernetes源(node1-node7)
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

#安装命令(node1主节点)
yum install kubectl kubelet kubeadm

#安装命令(非主节点) 如果需要都是用kubectl命令就都安装了也可以。
yum install kubelet kubeadm

#设置kubelet开启启动。
systemctl enable kubelet

kubernetes初始化

准备工作

因为国内无法连接k8s.gcr.io,无法下载kubernetes所需要的pod组件,这里推荐2种方式,都是利用阿里云镜像仓库来进行kubernetees初始化。

第一种方式

直接利用阿里云registry.aliyuncs.com/google_containers镜像库直接进行初始化,具体操作如下,需要在所有节点中都执行。

#先下载需要的环境,这里如果不知道需要哪些,可以直接运行初始化命令,根据报错信息来确定需要哪些镜像。 也可以通过kubeadm config images list命令来查看需要的镜像。
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.0
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.0
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.0
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.21.0
docker pull registry.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.0

#将下载的这些镜像改名为k8s.gcr.io的名字,这样初始化的时候检测到本地已经存在,就不会在去外网拉需要的镜像了。
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.0 k8s.gcr.io/kube-apiserver:v1.21.0
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.0 k8s.gcr.io/kube-controller-manager:v1.21.0
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.0 k8s.gcr.io/kube-scheduler:v1.21.0
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.21.0 k8s.gcr.io/kube-proxy:v1.21.0
docker tag registry.aliyuncs.com/google_containers/pause:3.4.1 k8s.gcr.io/pause:3.4.1
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0

#将阿里云名称的镜像删除。
docker rmi registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.0
docker rmi registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.0
docker rmi registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.0
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.21.0
docker rmi registry.aliyuncs.com/google_containers/pause:3.4.1
docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.13-0
docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.0

第二种方式

由于阿里云registry.aliyuncs.com/google_containers镜像库有的时候会出现维护的情况,比如我第一次搭建集群的时候就无法使用。所以可以自己在阿里云中创建一个镜像仓库,然后调用自己的仓库镜像就可以了。

创建自己的镜像仓库

在阿里云后台中,找到容器镜像服务

添加一个,个人版本的镜像服务(如果需要的镜像很多,推荐使用企业版)

设置访问密码(如果没有设置也可以用登陆阿里云的密码进行登陆)

创建一个命名空间(类似于库的名称,k8s镜像库、nginx镜像库等都是用命名空间进行分隔)

往命名空间中上传所需要的镜像仓库,一个镜像仓库可以有多个版本。

1.下载所需要上传的镜像

#利用可以连接外网,有docker服务的服务器下载。
dcoker pull k8s.gcr.io/kube-apiserver:v1.21.0

2. 登录阿里云Docker Registry

#registry.cn-beijing.aliyuncs.com 根据你创建镜像的地址这个会变,详细可以在阿里云中查看。
docker login --username=阿里云名称 registry.cn-beijing.aliyuncs.com

3.修改镜像名称为阿里云的地址以及命名空间

#4d217480042e是要上传的kube-apiserver:v1.21.0的镜像名称
#registry.cn-beijing.aliyuncs.com是自己的阿里云的地址,可以查看阿里云镜像服务获取
#bh_k8s创建的命名空间
docker tag 4d217480042e registry.cn-beijing.aliyuncs.com/bh_k8s/kube-apiserver:v1.21.0

4.将镜像推送到Registry

docker push registry.cn-beijing.aliyuncs.com/bh_k8s/kube-apiserver:v1.21.0

5.Registry中 查看上传的镜像

后续操作和第一种相似了,只是将拉取阿里云官方镜像换成你自己的阿里云镜像服务了,拉取前需要进行登陆。

初始化

初始化主节点(只在主节点运行)

#初始化前可以用改命令测试下镜像是否已经下载完成。kubeadm config images pull
#service-cidr service可申请的IP段。
#pod-network-cidr 可申请的IP段。
#(注意上述都用内网的IP段10.x.x.x、192.168.x.x、172.16.x.x-172.31.x.x的)
kubeadm init --kubernetes-version=1.21.0  --apiserver-advertise-address=主节点IP地址   --service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

将主节点最后的kubeadm join的一行代码,在所有从节点中运行,让从节点加入主节点中。

kubeadm join 主节点IP:6443 --token u0p0uw.bu8qeuilmt0u420q --discovery-token-ca-cert-hash sha256:c67c2b94edbc36f117bee768f2b07a1531b7fea9a3fb313e9fde0e67e8931359

在主节点中添加kubectl提示命令

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#将下列这样命令可以添加到$HOME/.bash_profile中,这样每次ssh就会自动执行。
source <(kubectl completion bash)

查看所有的节点

kubect get nodes

这样一个Kubernetes集群就搭建完成了,后续可以在安装一些管理软件比如kuboard等。这里在后续博客中介绍。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇