明明白白安装Kubernetes

本文档详细介绍了如何使用kubeadm在CentOS 7.7上安装Kubernetes 1.16.2集群,包括Master和多个Worker节点的配置,以及Calico作为网络插件的部署。安装过程中涉及内核参数调整、Docker安装、kubelet和kubeadm的配置,并提供了初始化系统、安装组件、设置网络和检查安装状态的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

首次安装Kubernetes我们采用kubeadm来安装单Master节点​的方式,安装最新版的Kubernetes和Calico,一步一步循序渐进。

介绍

Master:集群控制管理节点,所有的命令都经由master处理。

img

Worker:是kubernetes集群的工作负载节点。Master为其分配工作,当某个Node宕机时,Master会将其工作负载自动转移到其他节点。

img

服务器配置说明

192.168.190.10 master1 4核CPU、8G内存、100G磁盘
192.168.190.11 node1 8核CPU、48G内存、400G磁盘
192.168.190.12 node2 8核CPU、48G内存、400G磁盘
192.168.190.13 node3 8核CPU、48G内存、400G磁盘

安装的软件

系统:CentOS Linux release 7.7.1908
内核:Linux master1 5.3.0-1.el7.elrepo.x86_64
软件:Kubernetes 1.16.2
网络:Calico 3.10.0
容器:docker 18.09.9

初始化系统(需要在所有机器执行)

#修改系统内核参数
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
sysctl --system
#关闭selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#禁止firewalld
systemctl stop firewalld
systemctl disable firewalld
#注意不要创建交换分区
swapoff -a

安装docker(需要在所有机器执行)

#安装依赖的组件
yum install -y yum-utils nfs-utils device-mapper-persistent-data lvm2
#添加docker 阿里云的仓库,加速下载
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看docker的所有版本
yum list docker-ce --showduplicates | sort -r
#官方文档建议支持最高的docker版本为18.09.x,所以安装该版本
yum install -y docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
#官方文档建议的docker配置:cgroupdriver=systemd,可提高稳定性。修改使用国内docker源
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://3ecm3wg6.mirror.aliyuncs.com","https://0a79b4f9a40026e70fe0c01263d4b700.mirror.swr.myhuaweicloud.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
systemctl restart docker
systemctl enable docker
#参考官方文档:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker

安装kubelet kubeadm kubectl(需要在所有机器执行)

#使用阿里云kubernetes源
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
按最新版的组件
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2
systemctl start kubelet
systemctl enable kubelet
#注意:kubelet会启动失败,需要在 kubeadm init 的操作后,kubelet 才能正常启动。

初始化 master 节点(仅在master节点执行)

#设置变量
#APISERVER_NAME 不能是 master 的 hostname
export APISERVER_NAME=apiserver
export MASTER_IP=192.168.190.10
#POD_SUBNET为容器组所在的网段,不能与master节点worker节点所在的网段重叠
export POD_SUBNET=10.66.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
#创建kubeadm的配置文件,使用阿里云的镜像源
# 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
cat <<EOF >kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.16.2
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "${APISERVER_NAME}:6443"
networking:
  serviceSubnet: "10.96.0.0/16"
  podSubnet: "${POD_SUBNET}"
  dnsDomain: "cluster.local"
EOF
#安装master节点,根据您服务器网速的情况,您需要等候 3 - 10 分钟
kubeadm init --config=kubeadm-config.yaml --upload-certs
#配置 kubectl
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件
wget https://docs.projectcalico.org/v3.10/manifests/calico.yaml --no-check-certificate
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml
kubectl apply -f calico.yaml

检查master节点安装状况(仅在master节点执行)

#注意:在没安装worker节点前,calico-kube-controllers,calico-node,2个coredns 这4个pod不是Running状态是正常的,其它pod需要是Running状态。
watch kubectl get pod -n kube-system -o wide
#查看 master 节点初始化结果
kubectl get nodes -o wide
#获取worker节点执行kubeadm join的命令及参数
kubeadm token create --print-join-command

初始化所有的worker节点(仅在worker节点执行)

export MASTER_IP=192.168.190.10
export APISERVER_NAME=apiserver
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
#把在master节点获取的命令复制到worker节点执行
kubeadm join apiserver:6443 --token ewlmyi.wu8u8f2a0ffypuur     --discovery-token-ca-cert-hash sha256:42c1c2d45f9b21d918ee7fd40acf6f7eaf595ca925d54271dbe0fd31ae75ce8d

检查是否全部安装完成(仅在master节点执行)

#必须所有pod都是Running状态才安装成功。
watch kubectl get pod -n kube-system -o wide
kubectl get nodes -o wide

删除worker节点

#只在 worker 节点执行
kubeadm reset
#只在 master 节点执行
kubectl delete node node1
#如果需要重新初始化 master 节点,请在master节点执行 kubeadm reset 操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StarsL.cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值