一、環境准備
1. 關閉交換區
#臨時關閉 sudo swapoff -a #永久關閉 #把/etc/fstab中的swap注釋掉 sudo sed -i 's/.*swap.*/#&/' /etc/fstab
2. 禁用selinux
#臨時關閉 setenforce 0 #永久關閉 sudo sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
3. 關閉防火牆
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
二、安裝K8S
1. 配置系統基本安裝源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
2. 添加K8S安裝源
將如下內容保存到:/etc/yum.repos.d/kubernetes.repo
[kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el8-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
3. 安裝docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-ce
為了docker加速pull,可以設置阿里雲加速:
sudo mkdir -p /etc/docker sudo vi /etc/docker/daemon.json
設置為如下內容:
{ "registry-mirrors" : ["https://mj9kvemk.mirror.aliyuncs.com"] }
4. 安裝kubectl、kubelet、kubeadm
安裝kubectl、kubelet、kubeadm,設置kubelet開機啟動,啟動kubelet。
sudo yum install -y kubectl kubelet kubeadm sudo systemctl enable kubelet sudo systemctl start kubelet
查看K8S版本
kubeadm version
kubectl version --client
kubelet --version
5. 初始化kubernetes集群
kubeadm init --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=127.0.0.1 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.1 --pod-network-cidr=10.18.0.0/16
運行后出現問題:
[root@k8s-master01 ~]# kubeadm init --apiserver-advertise-address=0.0.0.0 \ --apiserver-cert-extra-sans=127.0.0.1 \ --image-repository=registry.aliyuncs.com/google_containers \ --ignore-preflight-errors=all \ --kubernetes-version=v1.21.1\ --service-cidr=10.10.0.0/16 \ --pod-network-cidr=10.18.0.0/16 W0702 16:23:11.951553 16395 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io] [init] Using Kubernetes version: v1.18.5 [preflight] Running pre-flight checks [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/ [preflight] Pulling images required for setting up a Kubernetes cluster [preflight] This might take a minute or two, depending on the speed of your internet connection [preflight] You can also perform this action in beforehand using 'kubeadm config images pull' [WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”.
出現[WARNING IsDockerSystemdCheck],是由於docker的Cgroup Driver和kubelet的Cgroup Driver不一致導致的,此處選擇修改docker的和kubelet一致
查看docker信息:
docker info | grep Cgroup
[root@k8s-master01 ~]# docker info | grep Cgroup Cgroup Driver: cgroupfs Cgroup Version: 1
可以看到驅動為Cgroup,需要改為systemd。編輯文件/usr/lib/systemd/system/docker.service
vi /usr/lib/systemd/system/docker.service
在ExecStart命令中添加
--exec-opt native.cgroupdriver=systemd
然后重啟docker,再查看信息,可以看到已經變為systemd了
systemctl daemon-reload
systemctl restart docker
docker info | grep Cgroup
此時再執行下面的命令進行初始化:
kubeadm init --apiserver-advertise-address=0.0.0.0 \ --apiserver-cert-extra-sans=127.0.0.1 \ --image-repository=registry.aliyuncs.com/google_containers \ --ignore-preflight-errors=all \ --kubernetes-version=v1.21.1 \ --service-cidr=10.10.0.0/16 \ --pod-network-cidr=10.18.0.0/16
kubeadm init --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=127.0.0.1 --image-repository=registry.aliyuncs.com/google_containers --ignore-preflight-errors=all --kubernetes-version=v1.21.1 --service-cidr=10.10.0.0/16 --pod-network-cidr=10.18.0.0/16
執行提示中的命令:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
再執行:
kubectl get node
kubectl get pod --all-namespaces
如果node節點為NotReady,因為coredns pod沒有啟動,缺少網絡pod。
6. 安裝calico網絡
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
運行之后查看信息,節點處於Ready狀態。