type
Post
status
Published
date
Feb 19, 2023
slug
summary
下文是在能够正常访问 google 的网络下完成部署,如果你的网络不方便连通外网,可能需要提前下载镜像或者在执行 kubeadm init 时指定镜像仓库地址等方式来下载镜像。
tags
工具
开发
category
技术分享
icon
下文是在能够正常访问 google 的网络下完成部署,如果你的网络不方便连通外网,可能需要提前下载镜像或者在执行 kubeadm init 时指定镜像仓库地址等方式来下载镜像。
前言
前不久花钱买了 CKA 和 CKS 的考试,打算今年把这两个证考了,所以又开始在家里折腾起集群来了。之前写过一篇用 kind 来部署 k8s 集群的,使用 kind 确实非常方便,一行命令就启动了,但是那种方式部署的集群,整个集群实际上在一个容器之中,个人认为比较适用的场景是用来跑测试之类的。当然,kubeadm 部署也非常简单,也是几条命令就可以自动化部署完成了。
准备
在部署集群的过程中,记得一定要看官网文档,网络上有很多的博客都写了要怎么安装,怎么部署,但是有很多已经是过时的,k8s 的更新非常快,大多数情况下可能按照以前的方式都可以执行成功,但是偶尔遇到一个问题可能就会卡半天。基于前面所提到的,下文中的安装方式都尽量以链接的方式指向官网文档。
需要在部署之前安装的程序:kubectl、kubeadm、kubelet
参考安装 kubeadm ,先在机器上安装容器运行时,以及上面提到的三个程序。
其中:
-
kubeadm:用来初始化集群的指令。
- kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
- kubectl:用来与集群通信的命令行工具。部署 k8s
由于只是个人部署的测试集群,我这里只添加一个参数:
--pod-network-cidr ,用于指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。sudo kubeadm init --pod-network-cidr=10.244.0.0/16自定义 pod 网络的目的是为了避免于主机中现有的网络发生冲突,如果不指定,那么默认的 CIDR 为
192.168.0.0/16耐心等待一段时间,终端中会给出安装成功的提示,并且会给出指引,复制 kubeconfig 文件到当前用户目录下等等。最后还有一点,单节点部署时,当前节点是控制平面节点,默认不会参与 pod 调度,因此还需要移除当前节点上的 taints。
kubectl taint nodes --all node-role.kubernetes.io/control-plane-1.25版本只需要执行前一条就足够,更旧版本的 k8s 可能还需要多执行下面这条指令
kubectl taint nodes --all node-role.kubernetes.io/master-安装 calico 网络
如果前面的流程顺利,此时执行
kubectl get nodes 可以看到有一个控制平面节点已经处于 Ready 状态。同时还可以使用 kubectl get pods -ALL 查看所有的 pod 都已经处于 running 状态。要使得集群中的 pod 能够正常工作通信,还需要安装一个网络插件,这里我选择的是 calico ,选它的原因是为了后面能够更好的和 istio 搭配来使用。
安装 calico 只需要两条指令,通过 operator 来完成整个的安装。这里的版本号为 v3.25,在复制之前,建议先去 [Quickstart for Calico on Kubernetes] 看一下,v3.25 有可能已经过时,安装的方式也可能有改变。
总结
安装 k8s 时,需要多查阅一下官方文档,如果在看中文文档时觉得有问题,最好切换问英文文档再仔细对比下,因为 k8s 官网的中文文档更新是要落后于英文的。安装完成后,需要安装一个 pod 网络插件,选择 calico 的原因是在后面使用 istio 的时候更加方便。