1.环境准备
1.1关闭selinux
getenforce # 查看 /usr/sbin/sestatus -v # 查看 vim /etc/selinux/config # 关闭selinux服务 将SELINUX=enforcing改为SELINUX=disabled shutdown -r now 重启服务
1.2关闭防火墙
firewall-cmd --state # 查看防火墙状态 systemctl stop firewalld # 禁用防火墙 systemctl start firewalld # 启动防火墙
1.3关闭 swap
swapoff /mnt/swap # 关闭swap分区 vim /etc/fstab # 修改配置文件 - /etc/fstab # /dev/mapper/centos-swap swap swap defaults 0 0 注释这一条 free -h # 确认swap已经关闭 vim /etc/sysctl.conf sysctl -p # swappiness 参数 ,使配置生效 vm.swappiness=0 # 修改 vm.swappiness 的修改为 0 没有就添加
1.4每台主机的主机名不相同
hostnamectl # 查看主机名 hostnamectl set-hostname localhost94 # hostnamectl修改主机名称 localhost94:主机名称
1.5每台主机的Mac 地址不相同
nmcli device show # 查看 mac 地址
1.6每台主机的UUID 不相同
nmcli con show # 查看网卡 uuid
1.7进行时间同步,并确认时间同步成功
timedatectl timedatectl set-ntp true
2.安装docker
2.1卸载旧版本Docker
yum remove docker docker-common docker-selinux docker-engine
2.2安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2.3添加 yum 软件源
yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
2.4yum软件源缓存,并安装docker-ce
yum makecache fast && yum install -y docker-ce
2.5启动Docker守护进程
service docker start systemctl start docker # centos7 systemctl enable docker # 开机启动
3 安装 kubeadm、kubelet 和 kubectl
3.1.安装准备
需要在每台机器上安装以下的软件包:
- kubeadm:用来初始化集群的指令。
- kubelet:在集群中的每个节点上用来启动 pod 和容器等。
- kubectl:用来与集群通信的命令行工具(Worker 节点可以不装,但是我装了,不影响什么)。
3.1配置K8S的yum源
# 这部分用是阿里云的源,如果可以访问Google,则建议用官方的源 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=1 repo_gpgcheck=1 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # 官方源配置如下 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 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 EOF
3.2增加配置
cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
3.3加载
sysctl --system
3.4安装
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
3.5启动并设置 kubelet 开机启动
systemctl start kubelet systemctl enable --now kubelet
4.使用 Kubeadm 创建集群
4.1初始化 Control-plane/Master 节点 master节点上执行
vim /etc/profile source /etc/profile export MASTER_IP=192.168.104.94 export APISERVER_NAME=kuber94s.api # 设置hosts echo "127.0.0.1 $(hostname)" >> /etc/hosts echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
4.2下面有不带注释的初始化命令,建议先查看带注释的每个参数对应的意义,确保与你的当前配置的环境是一致的,然后再执行初始化操作,避免踩雷。
# 初始化 Control-plane/Master 节点 kubeadm init \ --apiserver-advertise-address 0.0.0.0 \ # API 服务器所公布的其正在监听的 IP 地址,指定“0.0.0.0”以使用默认网络接口的地址 # 切记只可以是内网IP,不能是外网IP,如果有多网卡,可以使用此选项指定某个网卡 --apiserver-bind-port 6443 \ # API 服务器绑定的端口,默认 6443 --cert-dir /etc/kubernetes/pki \ # 保存和存储证书的路径,默认值:"/etc/kubernetes/pki" --control-plane-endpoint kuber4s.api \ # 为控制平面指定一个稳定的 IP 地址或 DNS 名称, # 这里指定的 kuber4s.api 已经在 /etc/hosts 配置解析为本机IP --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ # 选择用于拉取Control-plane的镜像的容器仓库,默认值:"k8s.gcr.io" # 因 Google被墙,这里选择国内仓库 --kubernetes-version 1.17.3 \ # 为Control-plane选择一个特定的 Kubernetes 版本, 默认值:"stable-1" --node-name master01 \ # 指定节点的名称,不指定的话为主机hostname,默认可以不指定 --pod-network-cidr 192.10.0.0/16 \ # 指定pod的IP地址范围 --service-cidr 192.20.0.0/16 \ # 指定Service的VIP地址范围 --service-dns-domain cluster.local \ # 为Service另外指定域名,默认"cluster.local" --upload-certs # 将 Control-plane 证书上传到 kubeadm-certs Secret
4.3不带注释的内容如下,如果初始化超时,可以修改DNS为8.8.8.8后重启网络服务再次尝试。
kubeadm init \ --apiserver-advertise-address 0.0.0.0 \ --apiserver-bind-port 6443 \ --cert-dir /etc/kubernetes/pki \ --control-plane-endpoint kuber94s.api \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version 1.20.5 \ --pod-network-cidr 192.10.0.0/16 \ --service-cidr 192.20.0.0/16 \ --service-dns-domain cluster.local \ --upload-certs
4.4如果初始化最终成功执行,你将看到如下信息:
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of the control-plane node running the following command on each as root: kubeadm join kuber94s.api:6443 --token bs9yxy.u1ubeptji5qv1m35 \ --discovery-token-ca-cert-hash sha256:2f024af2be987cd1e22525d98aa47e3f8ad82fba0050fb59cfd1240f031905b6 \ --control-plane --certificate-key d9be1be4f80152dfec64e790bffeac3262f5f954fd72a0265f8276ac5036bbea Please note that the certificate-key gives access to cluster sensitive data, keep it secret! As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use "kubeadm init phase upload-certs --upload-certs" to reload certs afterward. Then you can join any number of worker nodes by running the following on each as root: kubeadm join kuber94s.api:6443 --token bs9yxy.u1ubeptji5qv1m35 \ --discovery-token-ca-cert-hash sha256:2f024af2be987cd1e22525d98aa47e3f8ad82fba0050fb59cfd1240f031905b6
4.5为普通用户添加 kubectl 运行权限,命令内容在初始化成功后的输出内容中可以看到。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.6安装 Pod 网络附加组件 https://docs.projectcalico.org/manifests/calico.yaml
mkdir -p /usr/local/kubernetes/calico && cd /usr/local/kubernetes/calico curl https://docs.projectcalico.org/manifests/calico.yaml -O
稍等片刻查询 pod 详情,你也可以使用 watch 命令来实时查看 pod 的状态,等待 Pod 网络组件部署成功后,就可以看到一些信息了,包括 Pod 的 IP 地址信息,这个过程时间可能会有点长。
watch -n 2 kubectl get pods --all-namespaces -o wide
4.7将 Worker 节点添加到 Kubernetes
vim /etc/profile source /etc/profile export MASTER_IP=192.168.104.94 export APISERVER_NAME=kuber94s.api # 设置hosts echo "127.0.0.1 $(hostname)" >> /etc/hosts echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
将 Worker 节点添加到集群,这里注意,执行后可能会报错,有幸的话你会跳进这个坑,这是因为 Worker 节点加入集群的命令实际上在初始化 master 时已经有提示出来了,不过两小时后会删除上传的证书,所以如果你此时加入集群的时候提示证书相关的错误,请执行 kubeadm init phase upload-certs –upload-certs 重新加载证书。
kubeadm token create --print-join-command # 获取到结果 然后执行结果 kubeadm join kuber94s.api:6443 --token s7j2wg.6b7zu3lxv28q9gst --discovery-token-ca-cert-hash sha256:2f024af2be987cd1e22525d98aa47e3f8ad82fba0050fb59cfd1240f031905b6 kubeadm reset # 如果报错就执行这个 在节点上先执行如下命令,清理kubeadm的操作,然后再重新执行join 命令:
4.8添加 Master 节点 添加多个master 做高可用 不做高可用 一个master就可以
kubeadm join kuber94s.api:6443 --token bs9yxy.u1ubeptji5qv1m35 \ --discovery-token-ca-cert-hash sha256:2f024af2be987cd1e22525d98aa47e3f8ad82fba0050fb59cfd1240f031905b6 \ --control-plane --certificate-key d9be1be4f80152dfec64e790bffeac3262f5f954fd72a0265f8276ac5036bbea
kubectl taint nodes --all node-role.kubernetes.io/master- # 运行master上运行pod