2.1 | kubernetes: 在裸机 Linux 上安装 k8s 集群
在开始安装 k8s 必要的软件前,最理想的环境是能够自由访问外网,所以需要先准备好代理,这样在安装被墙软件、拉取被墙的镜像时方便很多,不用为这种意义不大的事情纠结。
基础系统: Ubuntu Server 22.04
虚拟机软件:VMware Fusion
宿主机系统:macOS
重命名系统名称
1 | hostnamectl set-hostname k8s-master |
Ubuntu 22.04 必要软件安装
设置软件源
打开 /etc/apt/source.list
,替换软件源为阿里云源,如下
1 | cat << EOF | sudo tee /etc/apt/sources.list >/dev/null && sudo apt update |
更新软件源
1 | sudo apt update && sudo apt upgrade -y |
zsh
1 | sudo apt install -y zsh |
修改 zsh 配置文件
1 | sed -i '2s/# //g' ~/.zshrc |
基础软件
常用小工具
1 | sudo apt install -y \ |
网络工具
1 | sudo apt install -y \ |
sudo 免输入密码
1 | sudo update-alternatives --config editor |
修改配置如下
1 | %sudo ALL=(ALL:ALL) NOPASSWD:ALL |
或直接运行下面的命令
1 | sudo sed -i '50s/ALL$/NOPASSWD:ALL/g' /etc/sudoers |
Docker
配置 Docker 软件源
1 | sudo apt install -y \ |
安装 Docker 及 containerd
1 | sudo apt update |
配置 Docker:/etc/docker/daemon.json
1 | cat <<EOF | sudo tee /etc/docker/daemon.json >/dev/null |
普通用户使用 docker 命令 (可尝试 logout 后再 login)
1 | sudo usermod -aG docker $USER |
开启 TCP 访问
1 | sudo sed -i '/^ExecStart=/s#$# -H tcp://0.0.0.0:2375#' /lib/systemd/system/docker.service |
关闭 swap 分区
永久关闭
1 | /swapfile none swap sw 0 0 |
暂时关闭,重启后失效
1 | sudo swapoff -a |
kubernetes 三件套
下载 gpg 密钥
1 | curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo tee /etc/apt/trusted.gpg.d/kubernetes-aliyun.gpg >/dev/null |
添加 k8s 镜像源
1 | cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list >/dev/null |
更新源列表
1 | sudo apt update |
下载 kubectl,kubeadm以及 kubelet
1 | sudo apt install -y kubelet kubeadm kubectl kubernetes-cni |
K8s 集群安装
配置 containerd
1 | containerd config default | sudo tee /etc/containerd/config.toml > /dev/null |
安装集群
1 | sudo kubeadm init \ |
10.244.0.0/16
的含义
对一个用 32 位二进制表示的 IP 地址,前 16 位位网络前缀,即不变的前缀,后面的 16 位是主机地址,是可变的。此处即 10.244 占 16 位,位网络前缀,不变。
--pod-network-cidr
指 pod 网络的 IP 地址范围
--service-cidr
指 svc 的虚拟 IP 地址范围,默认为 10.96.0.0/12
--apiserver-advertise-address
显式指定 apiserver 的 IP 地址
配置 kubectl
此时还不能通过 kubectl 访问,需要将配置文件拷贝到 $HOME/.kube
目录下
1 | mkdir -p $HOME/.kube |
加入集群
在各个 Node 中执行 kubeadm join ...
。
- 添加 Node 的语句如果堵塞,考虑验证 node 节点与 master 节点之间的连通性。
- 添加 Node 节点完成后,在 master 节点,如果发现 node 节点的状态为 NotReady,还可以考虑查看 master 与各个 node 节点之间的连通性。
安装 CNI 插件
安装 CNI 插件,不然 NODE 会处于 NOT_READY 状态。
-
1
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
-
1
2kubectl apply -f \
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
这个 flannel 有坑,apply 之后,在 pod 中无法访问 k8s 的 api-server。原因可能是上面 apply 的 kube-flannel.yml 中的 flannel 子网段是 10.244.0.0/16
。
后面确实在文档中找到相关的说明,需要在跑 kubeadm init
的时候,指定 --pod-network-cidr=10.244.0.0/16
,也就是和 flannel 指定的网段保持一致。
1 | kind: ConfigMap |
而 docker0 网桥的地址范围是 172.17.0.0/16
结果
最终,可以在 master 节点通过 kubectl get nodes -o wide
来查看集群的组成信息,如下:
其他配置
containerd
- 添加非 https 仓库
打开/etc/containerd/config.toml
文件,添加如下配置:重启 containerd1
2
3
4
5[plugins]
[plugins.cri.registry]
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."127.0.0.1:5000"]
endpoint = ["http://127.0.0.1:5000"]systemctl restart containerd
CentOS
关闭selinux
1 | sed -i 's/enforcing/disabled/' /etc/selinux/config |
关闭 swap
1 | sudo swapoff -a |
1 | sudo yum remove docker \ |
新增依赖
1 | cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo >/dev/null |
修改 docker 的 CgroupDriver。默认的是 cgroupfs,推荐的是 systemd。
1 | vim /etc/docker/daemon.json |
安装并开启 kubelet 自启动
1 | yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes |
代理
宿主机设置 v2ray 代理服务
模式选择 global,这里主要是因为没有设置 pac 规则
宿主机 IP:10.211.55.2
虚拟机 IP:10.211.55.3
curl 命令走代理
在 .bashrc 中添加如下变量:
1 | export ALL_PROXY=http://10.211.55.2:8001 |
让变量生效
1 | source .bashrc |
测试
1 | curl -v www.google.com |
apt 命令走代理
1 | sudo apt -o Acquire::http::proxy="http://10.211.55.2:8001" update |
配置 Docker 代理
1 | vim /lib/systemd/system/docker.service |
在 [Service]
块下面增加一行
1 | Environment="HTTP_PROXY=http://10.211.55.2:8001" "HTTPS_PROXY=https://10.211.55.2:8001" |
再重新加载守护进程与重启 docker
1 | systemctl daemon-reload |
Reference
https://www.xiebruce.top/796.html
https://forum.ubuntu.org.cn/viewtopic.php?t=476834
2.1 | kubernetes: 在裸机 Linux 上安装 k8s 集群