网上有不少kubernetes的安装博客,之所以要花时间再写一篇,是因为不少博文都是旧的。时间来到2021年6月,不少博客是2019年的,所以比教旧。还有国内的安装方法和国外的安装方法有稍稍不同,因为我们有防火墙,需要用自己的镜像。
本文是基于好几篇博文集合而成,参考文献都会在文后列出,读者可以自行查考。
1. 背景
本文采用 centos 8.3 的版本,centOS还是国内用的比较多的,虽然centOS未来真不知道会怎样发展,笔者日后也会建立kubernetes集群在Ubuntu之上,所以日后我们一起分享。kubernetes 的文档说2G内存,2核cpu就行。我们选择 两台16G内存,8核的虚拟机。一台为master,一台为worker. 先写master,然后写worker。部署在公司的内网里。所以,有些firewall的设置步骤就省略了。
2. 设置master
虽然kubernetes自己不支持docker,但开源组织会让docker支持或兼容kubernetes。所以,我们还是选择docker为容器。
I) 前期准备:
a. 首先让机器处于更新状态
dnf -y upgrade
b. 设置 setenforce 为 0,并写入文件 /etc/sysconfig/selinux
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
c. 这个步骤笔者也不懂,把英文原文之际放在这里:Enable transparent masquerading and facilitate Virtual Extensible LAN (VxLAN) traffic for communication between Kubernetes pods across the cluster.
modprobe br_netfilter
d. 接下来 disable firewalld,iptables, 简单干脆,在内网,我们先简单粗暴点,需要firewalld的读者,可以参考 https://upcloud.com/community/tutorials/install-kubernetes-cluster-centos-8/
sudo systemctl disable firewalld
sudo systemctl stop firewalld
sudo systemctl disable iptables
sudo systemctl stop iptables
e. 请注意,一定要将swap off,不然kubernetes有时不工作。而且,每一次重启机器,都要执行这行命令。熟练的读者可以将 sudo swapoff -a 设置在启动开始脚本里。
sudo sysctl --system
sudo swapoff -a
f. 设置hostname
sudo hostnamectl set-hostname master-1
g. 设置host文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.xxx.x.xxx master-1
II) 安装docker
a. 加入repository新的地址
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
b. 因为没有被repository管理组件列入,所以先要安装container.io.
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
c. 下面我们就开始安装docker的社区版本
dnf install docker-ce --nobest -y
d. 启动docker,并设置当服务器重启时,docker自动启动
sudo systemctl start docker
sudo systemctl enable docker
e. docker 成功安装后,验证一下。
sudo docker version
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
至此,docker 就安装好了。
III) 安装kubernetes
a. 先要将kubernetes的repository加入到master里。主要,国内不能用google的。我们采用aliyun的镜像。
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
exclude=kubelet kubeadm kubectl
EOF
b. 更新repsoitory。
dnf upgrade -y
c. 开始安装
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
d. 激活kubelet。
sudo systemctl enable kubelet
sudo systemctl start kubelet
e. 读者可以用下面命令看看kubelet的状态
sudo systemctl status kubelet
至此,kubelet 就安装好了,接下来就是配置了。
IV) 配置kubernetes
a. 这里要用国内的镜像源来pull,pull完之后再改名。
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
这里要注意,coredns 从这个镜像下载不下来,要去https://hub.docker.com/ 注册,并下载。
sudo docker login
sudo docker pull coredns/coredns:1.8.0
b. 然后将下载的image改名为google的。请将hashcode改为读者自己机器上的hashcode。
sudo docker image tag e16544fd47b0 k8s.gcr.io/kube-controller-manager:v1.21.1
sudo docker image tag a4183b88f6e6 k8s.gcr.io/kube-scheduler:v1.21.1
sudo docker image tag 4359e752b596 k8s.gcr.io/kube-proxy:v1.21.1
sudo docker image tag 0f8457a4c2ec k8s.gcr.io/pause:3.4.1
sudo docker image tag 0369cf4303ff k8s.gcr.io/etcd:3.4.13-0
sudo docker image tag 771ffcf9ca63 k8s.gcr.io/kube-apiserver:v1.21.1
sudo docker image tag 296a6d5035e2 k8s.gcr.io/coredns/coredns:v1.8.0
c. 我们使用calico, 读者可以使用其他网路组件。
sudo kubeadm init --pod-network-cidr 192.168.0.0/16
d. 请注意,在master上,每次init后,下面的步骤一定要重新做一次,如果有.kube目录,先删除。
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
也可以下载calico.yaml文件为本地文件,那么每次kubeadm init 后就不用每次下载。
e. 每次成功的kubeadm init后,都会有下面的提示语句,读者可以用在worker端。
kubeadm join 94.237.41.193:6443 --token 4xrp9o.v345aic7zc1bj8ba \
--discovery-token-ca-cert-hash sha256:b2e459930f030787654489ba7ccbc701c29b3b60e0aa4998706fe0052de8794c
f. 但忘记了,也不要紧,可以用下面的命令找回来:
sudo kubeadm token create --print-join-command
g. 至此,master端的kubernetes就安装好了:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 91s v1.18.0
3. 复原
1. 简单的两个命令就可以:
kubeadm reset
rm -rf /etc/cni/net.d
4. 参考文献
1. https://upcloud.com/community/tutorials/install-kubernetes-cluster-centos-8/
2. https://zhuanlan.zhihu.com/p/55740564
3. https://www.cnblogs.com/lifan1998/p/14326761.html
4. https://blog.csdn.net/qq_31024251/article/details/115752033
5. https://blog.csdn.net/networken/article/details/84571373
6. https://www.cnblogs.com/xuziyu/p/11726068.html
7. https://www.cnblogs.com/ericnie/p/7749588.html
8. https://github.com/kubernetes/kubernetes/issues/54918
5. 编辑历史
1. 2021年6月4日 初版
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。