使用 kubeadm 搭建 Kubernetes 集群
公众号 : 倔强小狮子
文章目录
- 1. Kubeadm方式搭建K8S集群概要
- 2. 安装要求
- 3. 准备环境
- 4. 初始化系统
- 5. 安装Docker
- 6. 校验以下 port 不被占用
- 7. 添加kubernetes软件源
- 8. 安装kubeadm,kubelet和kube`在这里插入代码片`ctl
- 9. 设置开机启动
- 10 . 查看安装版本
- 11. 部署Kubernetes Master `【master节点】`
- 12. 搭建成功
- 13. 测试集群
- 14. 搭建错误 (`建议错误后,除 CPU不足外,建议恢复快照重新安装`)
1. Kubeadm方式搭建K8S集群概要
- 准备三台虚拟机,同时安装操作系统CentOS 7.x
虚拟机或云服务器在条件允许的情况下尽量制作快照
- 对三个安装之后的操作系统进行初始化操作
- 在三个节点安装 docker kubelet kubeadm kubectl
- 在master节点执行kubeadm init命令初始化
- 在node节点上执行 kubeadm join命令,把node节点添加到当前集群
- 配置CNI网络插件,用于节点之间的连通【*】
- 通过拉取一个nginx进行测试,能否进行外网测试
步骤 14 存在错误解决步骤
2. 安装要求
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】
- 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
- 禁止swap分区
3. 准备环境
角色 | IP |
---|---|
k8s-master | 192.168.232.130 |
k8s-node-2 | 192.168.232.129 |
k8s-node-1 | 192.168.232.128 |
4. 初始化系统
4.1. ip addr 无 IP
- 使用 ip addr 查看服务器是否存在 外网 IP, 如果不存在
- 使用
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改 该文件 ONBOOT=no 至 yes , 然后wq
保存退出(或 wq! )
4.2. 修改 各服务器的 设置主机名
-
hostnamectl set-hostname <hostname>
4.3. 关闭防火墙(保证安全情况下[生产注意]
)
-
systemctl stop firewalld
4.4. 永久关闭防火墙(可选)
-
systemctl disable firewalld
4.5. 关闭selinux
-
永久关闭 sed -i 's/enforcing/disabled/' /etc/selinux/config 临时关闭 setenforce 0
请注意:通过运行命令 setenforce 0 和 sed ... 将 SELinux 设置为 permissive 模式 可以有效地将其禁用。 这是允许容器访问主机文件系统所必需的,而这些操作时为了例如 Pod 网络工作正常。
官方链接
4.6. 关闭swap
-
临时 swapoff -a 永久关闭 sed -ri 's/.*swap.*/#&/' /etc/fstab
4.7. 将桥接的IPv4流量传递到iptables的链(重要
)
-
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF 设置生效 sysctl --system
4.8 确保每个节点上 MAC 地址和 product_uuid 的唯一性
使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址,可以使用
sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验,一般来讲,
硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。
Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装 失败。
检查网络适配器
4. 9. 时间同步,久一点
(可选)
-
yum install ntpdate -y ntpdate time.windows.com
5. 安装Docker
5. 1. 首先配置一下Docker的阿里yum源
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
5.2. 然后yum方式安装docker
-
# yum安装 yum -y install docker-ce
5.3. 查看 docker 版本( 校验 安装成功 )
5.4. 启动 docker (会生成一些 docker本身配置文件)
-
systemctl enable docker systemctl start docker
5.5. 配置 docker 镜像源 (阿里镜像源速度块)
-
cat >> /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } EOF # 重启 docker systemctl restart docker
5.6. 校验 docker 镜像源配置完成
6. 校验以下 port 不被占用
6.1 Control-plane nodes (master 节点)
协议 | 方向 | 端口范围 | 作用 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 6443* | Kubernetes API 服务器 | 所有组件 |
TCP | 入站 | 2379-2380 | etcd 服务器客户端 API | kube-apiserver, etcd |
TCP | 入站 | 10250 | Kubelet API | kubelet 自身、控制平面组件 |
TCP | 入站 | 10251 | kube-scheduler | kube-scheduler 自身 |
TCP | 入站 | 10252 | kube-controller-manager | kube-controller-manager 自身 |
6.2 Worker nodes (工作节点)
协议 | 方向 | 端口范围 | 作用 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 10250 | Kubelet API | kubelet 自身、控制平面组件 |
TCP | 入站 | 30000-32767 | NodePort 服务 | 所有组件 |
注意 : 使用 * 标记的端口可以被占用, 其余需验证开放状态
7. 添加kubernetes软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
8. 安装kubeadm,kubelet和kube在这里插入代码片
ctl
方式(一) 安装kubelet、kubeadm、kubectl 未指定版本 `建议使用方式二
具体查看 XX 搭建错误`
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
方式(二)安装kubelet、kubeadm、kubectl,同时指定版本 `避开 XX. 搭建错误`
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
9. 设置开机启动
systemctl enable --now kubelet
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=706b4162c0a64056b38845e5e718a032.png
10 . 查看安装版本
kubectl version
11. 部署Kubernetes Master 【master节点】
注意 : 只在 master 节点执行, 只在 master 节点执行, 只在 master 节点执行, 重要的事情说三遍
kubeadm init --apiserver-advertise-address=192.168.232.130 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
- –apiserver-advertise-address : Control-plane 地址 (master 节点地址)
- –image-repository : k8s 镜像源 (阿里云镜像源)
- –kubernetes-version : 安装版本
- 其他两个是 集群交互地址
11.1 pull images
11.2 pull image 进行中查看
另外打开 master 节点一个窗口 docker images
12. 搭建成功
12.1 搭建展示
-
红色框
中容易卡住, 首先排查 kubectl, kubiadm 是否安装成功, 校验服务器可以上网 - 需在 master 节点执行
蓝色框
中代码 -
黄色框
中代表 node节点执行加入 master节点
12.2 node 加入集群
# kubeadm init 成功后提示信息中可获取
kubeadm join 192.168.186.136:6443 --token z5n06u.rg7hvmxpsx15nfot --discovery-token-ca-cert-hash sha256:0c2775e3c5f45be1d60cca3de27bcbcd2b65a491072a2f5f9b497aea3582fd28
12.2 查看 集群状态
kubectl get node
- NotReady : 准备就绪状态
12.3 部署CNI网络插件
# 添加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
13. 测试集群
- 在Kubernetes集群中创建一个pod,验证是否正常运行
# 下载nginx 会联网 pull nginx image kubectl create deployment nginx --image=nginx # 查看状态 kubectl get pod # 暴露端口 kubectl expose deployment nginx --port=80 --type=NodePort # 查看一下对外的端口 kubectl get pod,svc
14. 搭建错误 (建议错误后,除 CPU不足外,建议恢复快照重新安装
)
1. 错误
error: Missing or incomplete configuration info. Please point to an existing, complete config file:
- Via the command-line flag --kubeconfig
- Via the KUBECONFIG environment variable
- In your home directory as ~/.kube/config
To view or setup config directly use the ‘config’ command.
解决 :
vim /etc/profile
新增一行
export KUBERNETES_MASTER="127.0.0.1:8080"
保存退出
source /etc/profile
刷新环境变量
2. 错误
[preflight] You can also perform this action in beforehand using ‘kubeadm config images pull’
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image registry.aliyuncs.com/google_containers/coredns:v1.8.0: output: Error response from daemon: manifest for registry.aliyuncs.com/google_containers/coredns:v1.8.0 not found: manifest unknown: manifest unknown
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher在阿里云镜像中未找到 当前 安装版本, 只发现 1.8 版本
解决 : 卸载 kubectl , kubeadm, kubernetes-cni
kubeadm reset
yum erase -y kubelet kubectl kubeadm kubernetes-cni
# kubeadm init pull images 全部删除干净
docker rmi -f registry.aliyuncs.com/google_containers/kube-apiserver (IMAGE ID )
docker rmi -f registry.aliyuncs.com/google_containers/kube-scheduler (IMAGE ID )
docker rmi -f registry.aliyuncs.com/google_containers/kube-proxy (IMAGE ID )
docker rmi -f registry.aliyuncs.com/google_containers/kube-controller-manager (IMAGE ID )
docker rmi -f registry.aliyuncs.com/google_containers/pause (IMAGE ID )
docker rmi -f registry.aliyuncs.com/google_containers/etcd (IMAGE ID )
docker images
IMAGE ID (如下图黄色)
3. 错误
-
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port? -
上诉 地址被墙, 需要*解决, 也可以进行修改 hosts文件解决
-
域名ip查询链接链接:http://ip.tool.chinaz.com/
-
获得下面任意 IP, 修改 hosts 文件
cat >> /etc/hosts << EOF 185.199.109.133 raw.githubusercontent.com EOF
-
网络不通 多尝试
尝试 九十一次后如果再不通, 无缘了
4. 错误
-
导致 master kubectl get node -> NotReady 状态,因为 flannel 没有安装成功, 出现 NotReady 的节点, 在该节点执行
docker images
后与其他正常节点对比, 查看缺少的 image 进行 docker pull
例如 :docker pull quay.io/coreos/flannel:v0.14.0
-
完整的 image
期待你的关注,和我一起学习
转载说明:转载携带原文链接