一、准备工作(三个节点都需要设置)
1,安装 Docker
所有的节点都需要安装 Docker,具体步骤可以参考之前的文章:
2,安装 kubelet、kubeadm 和 kubectl
- kubeadm:用来初始化集群(Cluster)
- kubelet:运行在集群中的所有节点上,负责启动 pod 和 容器。
- kubectl:这个是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http: //mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http: //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装kubelet kubeadm kubectl,可以指定版本
$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes #启动kubelet 并设置为默认开机启动
$ systemctl enable kubelet && systemctl start kubelet |
3,修改 sysctl 配置
1
|
vi /etc/sysctl.conf |
(2)在文件中添加如下内容后,保存退出。
1
2
3
|
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 |
(3)最后执行如下命令即可:
1
|
sysctl --system |
4,关闭 swap
(1)首先执行如下命令将其关闭:
1
|
swapoff -a |
1
|
vi /etc/fstab |
(3)将 /dev/mapper/centos-swap swap swap default 0 0 这一行前面加个 # 号将其注释掉。
5. 修改Cgroup Driver
5.1 修改daemon.json
修改daemon.json,新增‘"exec-opts": ["native.cgroupdriver=systemd"’
[root@master ~]# more /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
5.2 重新加载docker
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
# 将 SELinux 设置为 permissive 模式(将其禁用)
$ setenforce 0
$ sed -i
‘s/^SELINUX=enforcing$/SELINUX=permissive/‘
/etc/selinux/config
二、Master 节点的安装配置
1,初始化 Master
(1)我们在 Master 上执行如下命令进行初始化:
1
|
$:kubeadm init --pod-network-cidr=10.244.0.0/16 #或者此命令
$:kubeadm init --kubernetes-version=v1.21.0 --apiserver-advertise-address 192.168.37.101 --pod-network-cidr=10.10.0.0/16 |
(2)初始化的时候 kubeadm 会做一系列的校验,以检测你的服务器是否符合 kubernetes 的安装条件,检测结果分为 [WARNING] 和 [ERROR] 两种。其中 [ERROR] 部分要予以解决。
- Master 节点需要至少两核 CPU:由于我用的是虚拟机,关机后更改下虚拟机配置即可。
- bridge-nf-call-iptables 这个参数,需要设置为 1:如果我们前面做了准备工作里的第三步,就不会有这个问题了。
- swap 需要关闭:执行 swapoff -a 将其关闭即可。
#创建脚本文件 images.sh,
$:vi images.sh
#脚本内容如下:
#!/bin/bash #镜像仓库地址 #阿里 registry.aliyuncs.com/google_containers url=registry.aliyuncs.com/google_containers version=v1.21.0 images=(`kubeadm config images list --kubernetes-version=$version|awk -F ‘io/‘ ‘{print $2}‘`) for imagename in ${images[@]} ; do if [[ $imagename = coredns* ]] ; then docker pull $imagename docker tag $imagename k8s.gcr.io/$imagename docker rmi -f $imagename else docker pull $url/$imagename docker tag $url/$imagename k8s.gcr.io/$imagename docker rmi -f $url/$imagename fi done
#然后授予执行权限 $:chmod +x ./images.sh #执行: $:./images.sh
(6)其中 coredns/coredns:v1.8.0 下载失败,因从hub.docker上查找不到此版本,我们采用手动的方式进行下载,访问conedns官网,找到对应版本进行下载
通过以下命令导入容器
1
|
$:cat coredns_1.8.0_linux_amd64.tgz | docker import - coredns:v1.8.0 |
1
|
$:docker tag coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
|
2,配置 kubectl(使用root用户也正常)
1
|
su - app |
(3)依次执行如下命令(即前面 kubeadm init 输出的第一个红框内容),为 hangge 用户配置 kubectl:
1
2
3
|
mkdir -p $HOME /.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config
sudo chown $(id -u):$(id -g) $HOME /.kube/config
|
(4)为了使用更加便捷,启用 kubectl 命令的自动补全功能。
1
|
|
3,安装 Pod 网络
1
|
kubectl apply -f https: //raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml |
4,开放端口(可以关闭防火墙)
分别执行下面两条命令配置 firewall 防火墙策略,开放相关端口:
1
2
3
4
5
6
7
|
firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=2379/tcp firewall-cmd --permanent --add-port=2380/tcp firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10252/tcp firewall-cmd --reload |
三、Node 节点的安装配置
1,添加节点
1
|
kubeadm join 192.168.37.101:6443 --token ethqh8.nmtfwcg88gnfwvsu --discovery-token-ca-cert-hash sha256:1319e8da4d083b5b2f40161045845674bdbe7823c93c6767326c39cf719cb0f1 |
(2)显示如下内容则说明节点添加成功:
2,安装镜像
(1)在每一个 node 节点上我们还需要下载 quay.io/coreos/flannel:v0.11.0-amd64、k8s.gcr.io/pause 和 k8s.gcr.io/kube-proxy 这三个镜像,其中后面两个镜像具体版本可以执行kubeadm config images list 查看一下:(2)由于网络问题,后面两个镜像可能没法自动下载下来(第一个可以直接下载)。我们可以通过国内厂商提供的 kubernetes 的镜像服务来下载,再通过 docker tag 命令将其改成kudeadm 需要的镜像名称。
1
2
3
4
5
6
7
|
docker pull quay.io/coreos/flannel:v0.11.0-amd64 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1 k8s.gcr.io/kube-proxy:v1.14.1 |
3,开放端口
1
2
|
firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --reload |
四、查看节点状态
1
|
kubectl get pod --all-namespaces |
1
|
kubectl describe pod kube-proxy-96bz6 -- namespace =kube-system
|
(5)结果如下,是由于下载 image 时失败。这个可能是网络问题,我们可以继续等待,因为 Kubernetes 会自动重试。当然我们也可以自己手动执行 docker pull 去下载这个镜像。