目录
二、安装docker(所有机器——是指所有的节点包含master和node,后面也一样单独装的会说明)
1 安装 kubelet kubeadm kubectl(master上执行)
(1)首先查看kubeadm config 依赖的images有哪些:
(2)然后从国内镜像拉取这些镜像(有些是可以直接拉取的,比如 k8s.gcr.io/coredns/coredns:v1.8.6)
(3)然后根据(1)中的依赖对这些镜像进行重命名(这里要注意重命名的版本号有的是带v的,有的是不带的)注意看清楚。
一、环境准备
本次安装的docker和k8s版本为:
ubuntu -v20.04
k8s -v1.23.1
主机 |
内网地址 |
说明 |
47.200.162.6 |
172.31.186.226 |
master节点,能连外网,至少2核CPU,2G内存 |
47.200.168.250 |
172.31.186.227 |
node节点,能连外网,至少2核CPU,2G内存 |
二、安装docker(所有机器——是指所有的节点包含master和node,后面也一样单独装的会说明)
# 安装docker所需的工具(安装最新版即可) apt-get update apt-get install docker.io -y # 设置开机启动并启动docker sudo systemctl start docker sudo systemctl enable docker
三、设置k8s环境准备条件(所有机器)
# 禁用交换分区(在旧版的 k8s 中 kubelet 都要求关闭 swapoff ,但最新版的 kubelet 其实已经支持 swap ,因此这一步其实可以不做。) swapoff -a # 永久禁用,打开/etc/fstab注释掉swap那一行。 sudo vim /etc/fstab # 修改内核参数(首先确认你的系统已经加载了 br_netfilter 模块,默认是没有该模块的,需要你先安装 bridge-utils) apt-get install -y bridge-utils modprobe br_netfilter lsmod | grep br_netfilter # 如果报错找不到包,需要先更新 apt-get update -y
四、安装与配置k8s
1 安装 kubelet kubeadm kubectl(master上执行)
# 安装基础环境 apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - # 执行配置k8s阿里云源 vim /etc/apt/sources.list.d/kubernetes.list #加入以下内容 deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main # 执行更新 apt-get update -y # 安装kubeadm、kubectl、kubelet apt-get install -y kubelet=1.23.1-00 kubeadm=1.23.1-00 kubectl=1.23.1-00 # 阻止自动更新(apt upgrade时忽略)。所以更新的时候先unhold,更新完再hold。 apt-mark hold kubelet kubeadm kubectl
安装如果报错的话,需要先卸载原有的kubectl、kubeadm、kubelet 然后再执行安装
2 部署 master (master上执行)
创建kubeadm-config.yaml 配置文件,文件内容如下:
apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 172.31.186.226 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock imagePullPolicy: IfNotPresent name: master taints: null --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: 1.23.1 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 scheduler: {} --- kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 #cgroupDriver: systemd cgroupDriver: cgroupfs
修改 文件中的advertiseAddress 参数为当前机器的局域网地址
在运行 kubeadm init 之前可以先执行 kubeadm config images pull 来测试与 gcr.io 的连接,kubeadm config images pull尝试是否可以拉取镜像,如果你的服务器再国内,由于某些原因,是无法访问"k8s.gcr.io", "gcr.io", "quay.io"
先测试:
kubeadm config images pull
如果不能正常拉取,那么接着往下,如果可以正常拉取,可以直接跳转到 下一步 四.3
(1)首先查看kubeadm config 依赖的images有哪些:
#查看kubeadm config所需的镜像 kubeadm config images list #执行结果如下 k8s.gcr.io/kube-apiserver:v1.23.8 k8s.gcr.io/kube-controller-manager:v1.23.8 k8s.gcr.io/kube-scheduler:v1.23.8 k8s.gcr.io/kube-proxy:v1.23.8 k8s.gcr.io/pause:3.6 k8s.gcr.io/etcd:3.5.1-0 k8s.gcr.io/coredns/coredns:v1.8.6
(2)然后从国内镜像拉取这些镜像(有些是可以直接拉取的,比如 k8s.gcr.io/coredns/coredns:v1.8.6)
#从国内镜像拉取 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.8 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0 docker pull coredns/coredns:1.8.6
(3)然后根据(1)中的依赖对这些镜像进行重命名(这里要注意重命名的版本号有的是带v的,有的是不带的)注意看清楚。
#将拉取下来的images重命名为kubeadm config所需的镜像名字 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.8 k8s.gcr.io/kube-apiserver:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.8 k8s.gcr.io/kube-controller-manager:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.8 k8s.gcr.io/kube-scheduler:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.8 k8s.gcr.io/kube-proxy:v1.23.8 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0 docker tag coredns/coredns:1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
3 执行初始化操作
kubeadm init --config kubeadm-config.yaml
执行成功后会提醒如下三件事
会提示你输入如下命令,复制粘贴过来,执行即可。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
4 获取加入集群的命令
记住node加入集群的命令 上面kubeadm init执行成功后会返回给你node节点加入集群的命令,等会要在node节点上执行,需要保存下来,如果忘记了,可以使用如下命令获取。
kubeadm token create --print-join-command
5 部署工作节点(在node上执行)
(1)安装环境
# 安装基础环境 apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - # 执行配置k8s阿里云源 vim /etc/apt/sources.list.d/kubernetes.list #加入以下内容 deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main # 执行更新 apt-get update -y # 安装kubeadm、kubectl、kubelet apt-get install -y kubelet=1.23.1-00 kubeadm=1.23.1-00 kubectl=1.23.1-00 # 阻止自动更新(apt upgrade时忽略)。所以更新的时候先unhold,更新完再hold。 apt-mark hold kubelet kubeadm kubectl
(2)加入集群
这里加入集群的命令每个人都不一样,可以登录master节点,使用kubeadm token create –print-join-command 来获取。获取后执行如下。
kubeadm join 172.31.186.200:6443 --token fmty0x.5v15q0m9nzwd8lcy --discovery-token-ca-cert-hash sha256:604205e4fd92840baa05977e1770cefcd45ebae251761d94144572f66b1f4e1d
如果此处报错,则需要重启 即可
kubeadm reset
加入成功后,可以在master节点上使用kubectl get nodes命令查看到加入的节点
五、部署 Calico(master机器)
以上步骤安装完后,机器搭建起来了,但状态还是NotReady状态,如下图,master机器需要安装Calico。
kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml
安装完成后需要等待k8s重新拉起节点
六、完成
在master执行,即可看到节点已为Ready状态
kubectl get nodes
原文链接:https://blog.csdn.net/qq_40279964/article/details/125429233