安装kubernetes v1.21.1
一、环境准备
(一)、系统环境
CentOS 7.9, 最小化安装,三台
(二)、IP地址、域名规划
序号 | IP | 主机名 |
---|---|---|
1 | 172.16.1.236 | k8s-example-node01 |
2 | 172.16.1.237 | k8s-example-node02 |
3 | 172.16.1.238 | k8s-example-node03 |
写入hosts文件:
cat >/etc/hosts <<EOF
172.16.1.236 k8s-example-node01
172.16.1.237 k8s-example-node02
172.16.1.238 k8s-example-node03
EOF
设置主机名(下次登陆时生效)
# hostnamectl set-hostname k8s-example-node01
# hostnamectl set-hostname k8s-example-node02
# hostnamectl set-hostname k8s-example-node03
(三)、关闭selinux
# setenforce 0
# sed -i 's/^SELINUX=\w*$/SELINUX=disabled/g' /etc/selinux/config
(四)、关闭Firewalld
# systemctl stop firewalld && systemctl disable firewalld
(五)、关闭swap分区
# swapoff -a
为避免主机重启后再次挂载swap分区,可在/etc/fstab
文件中将挂载分区的行注释掉。
(六)、配置内核模块和系统参数
lsmod | grep br_netfilter || modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
二、安装Docker
(一)、卸载旧版本Docker(如果安装过)
# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
(二)、配置Docker官方yum仓库
# yum install -y yum-utils
# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
(三)、安装Docker
# yum -y install docker-ce docker-ce-cli containerd.io
默认安装最新版本,也可以通过指定版本号来安装指定版本。
(四)、修改Docker默认使用的cgroup驱动
# cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
(五)、启动Docker
# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker
# docker info | grep -i cgroup
三、安装kubernetes组件
# cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# systemctl enable --now kubelet
四、初始化集群
以上所有的操作都要在三台主机执行,之后的命令不同主机之间会有所区别。
(一)、初始化集群
控制节点操作:
# kubeadm init
常见参数:
--kubernetes-version v1.21.1 # 指定要安装的版本
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers # 默认的镜像仓库为k8s.gcr.io,一般都无法正常访问,可以尝试用阿里云提供的仓库代替
--pod-network-cidr 10.244.0.0/16 # 指定集群要使用的IP地址段
在控制节点执行完初始化操作之后,根据提示,到work节点执行提示的kubeadm join ...
(二)、安装网络插件
# curl https://docs.projectcalico.org/manifests/calico.yaml -O
# kubectl apply -f calico.yaml
五、常见问题处理
(一)、通过yum安装kubeadm,kubelet,kubectl失败
可在能访问谷歌k8s yum仓库的主机通过yumdownloader --resolve kubelet kubeadm kubectl
命令,将kubelet kubeadm kubectl的rpm包及其依赖包一起下载下来,拷贝到本地之后,直接使用rpm ivh *
或者yum -y localinstall
命令来安装。
(二)、kubeadm初始化失败
根据执行kubeadm初始化时的提示,如果是检查项没通过,可修复相关检查项。
在初始化之前,可先通过kubeadm config images list
查看需要的docker镜像,在初始化之前先进行下载或导入离线镜像文件。
如果是因为无法下载docker镜像,可尝试用过来docker镜像仓库地址替换默认的谷歌镜像仓库,在执行kubeadm init
时,添加--image-repository
参数,指定国内的镜像仓库地址,例如阿里云的registry.cn-hangzhou.aliyuncs.com/google_containers
。
通过安装v1.21.1版本发现,阿里云镜像仓库没有coredns:v1.8.0
,可按照下载rpm包的思路,先将coredns:v1.8.0
下载到能访问谷歌镜像仓库k8s.gcr.io
的主机,再通过docker image save
命令导出,拷贝到本地主机之后,再使用docker image load
命令提前将镜像导入。
六、资源下载
经过本次安装,整理了一下安装时容易出现无法下载的资源,上传到了百度网盘,有需要的可自取(仅限kubernetes v1.21.1版本)。
链接: https://pan.baidu.com/s/1BQXN03N3g3DFG5DmaXh1CA 提取码: eii8
文件列表如下:
tree -f k8s_v1.21.1/
k8s_v1.21.1
├── k8s_v1.21.1/images
│ ├── k8s_v1.21.1/images/cni_v3.19.1.tgz
│ ├── k8s_v1.21.1/images/coredns_v1.8.0.tgz
│ ├── k8s_v1.21.1/images/etcd_3.4.13-0.tgz
│ ├── k8s_v1.21.1/images/kube-apiserver_v1.21.1.tgz
│ ├── k8s_v1.21.1/images/kube-controller-manager_v1.21.1.tgz
│ ├── k8s_v1.21.1/images/kube-proxy-amd64_v1.21.1.tgz
│ ├── k8s_v1.21.1/images/kube-proxy_v1.21.1.tgz
│ ├── k8s_v1.21.1/images/kube-scheduler_v1.21.1.tgz
│ ├── k8s_v1.21.1/images/node_v3.19.1.tgz
│ ├── k8s_v1.21.1/images/pause_3.4.1.tgz
│ └── k8s_v1.21.1/images/pod2daemon-flexvol_v3.19.1.tgz
└── k8s_v1.21.1/rpms
├── k8s_v1.21.1/rpms/docker
│ ├── k8s_v1.21.1/rpms/docker/audit-libs-python-2.8.5-4.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/checkpolicy-2.5-8.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/containerd.io-1.4.4-3.1.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
│ ├── k8s_v1.21.1/rpms/docker/docker-ce-20.10.6-3.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/docker-ce-cli-20.10.6-3.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/docker-ce-rootless-extras-20.10.6-3.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/docker-scan-plugin-0.7.0-3.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/fuse3-libs-3.6.1-4.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/libcgroup-0.41-21.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/libseccomp-2.3.1-4.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/libsemanage-python-2.5-14.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/policycoreutils-python-2.5-34.el7.x86_64.rpm
│ ├── k8s_v1.21.1/rpms/docker/python-IPy-0.75-6.el7.noarch.rpm
│ ├── k8s_v1.21.1/rpms/docker/setools-libs-3.3.8-4.el7.x86_64.rpm
│ └── k8s_v1.21.1/rpms/docker/slirp4netns-0.4.3-4.el7_8.x86_64.rpm
└── k8s_v1.21.1/rpms/k8s
├── k8s_v1.21.1/rpms/k8s/conntrack-tools-1.4.4-7.el7.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/cri-tools-1.13.0-0.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/kubeadm-1.21.1-0.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/kubectl-1.21.1-0.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/kubelet-1.21.1-0.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/kubernetes-cni-0.8.7-0.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/libnetfilter_cthelper-1.0.0-11.el7.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/libnetfilter_cttimeout-1.0.0-7.el7.x86_64.rpm
├── k8s_v1.21.1/rpms/k8s/libnetfilter_queue-1.0.2-2.el7_2.x86_64.rpm
└── k8s_v1.21.1/rpms/k8s/socat-1.7.3.2-2.el7.x86_64.rpm
如果在安装时还有其他问题,欢迎留言讨论