Kubernetes v1.28 集群安装
基础环境配置
注意!!!先对系统进行对时,否则出现证书错误。
转发 IPv4 并让 iptables 看到桥接流量。
1 | cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf |
通过运行以下指令确认 br_netfilter
和 overlay
模块被加载:
1 | lsmod | grep br_netfilter |
通过运行以下指令确认 net.bridge.bridge-nf-call-iptables
、net.bridge.bridge-nf-call-ip6tables
和 net.ipv4.ip_forward
系统变量在你的 sysctl
配置中被设置为 1。
1 | sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward |
关闭 Swap 分区,编辑 /etc/fstab
删除 /swap.img
条目,然后重启。
安装运行时 containerd
从 https://github.com/containerd/containerd/releases 下载最新稳定版二进制包。
1 | wget https://github.com/containerd/containerd/releases/download/v1.6.24/containerd-1.6.24-linux-amd64.tar.gz |
添加系统 service 文件 https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
到 /usr/lib/systemd/system/
目录。
1 | wget -O /usr/lib/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service |
启用 service。
1 | systemctl daemon-reload |
安装 runc,从 https://github.com/opencontainers/runc/releases 下载最新稳定二进制放入 /usr/local/bin/runc
即可。
1 | wget -O /usr/local/bin/runc https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64 |
安装 CNI 插件,从 https://github.com/containernetworking/plugins/releases 下载最新稳定版,解压到 /opt/cni/bin
。
1 | mkdir -p /opt/cni/bin |
安装 crictl ,从 https://github.com/kubernetes-sigs/cri-tools/releases 下载二进制放入 /usr/local/bin/crictl
即可,配置
crictl。
1 | wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.28.0/crictl-v1.28.0-linux-amd64.tar.gz |
生成 containerd 配置文件。
1 | mkdir -p /etc/containerd |
修改 /etc/containerd/config.toml
中的 SystemdCgroup
为 true,重启服务。
1 | systemctl restart containerd |
安装 kubeadm、kubelet 和 kubectl
1 | sudo apt-get update |
以上三个步骤,无论是 master 还是 node 都需要执行。
配置 k8s master
1 | kubeadm init --pod-network-cidr=10.0.0.0/16 |
创建配置文件
1 | mkdir -p $HOME/.kube |
创建成功后会给出 node 的连接命令,类似
1 | kubeadm join 192.168.1.60:6443 --token u4jjkw.vgozjpyog6mjqsbr \ |
如果 token 已经过了有效期可以通过 kubeadm token create --print-join-command
生成新 token
生成 token 命令
kubeadm token create
查看证书 hash
命令 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
加入命令是
kubeadm join <master ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<证书 hash>
查看已经生成的 token
kubeadm token list
添加快捷键
1 | alias k=kubectl |
安装 CNI 组件 (安装一个即可)
安装 Calico
导入 CRD 文件
1 | kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/tigera-operator.yaml |
下载配置文件
1 | wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/custom-resources.yaml |
修改配置文件中的 pod 网段和集群的 pod 网段相同 cidr
,安装组件
1 | k apply -f custom-resources.yaml |
安装完成后,master 节点处于 ready 状态,集群创建成功
添加 node 节点
节点也需要配置好初始化环境和 containerd 以及 cni 插件。
加入集群运行,需要用到 master 初始化时打印的加入命令。
1 | kubeadm join 192.168.1.60:6443 --token u4jjkw.vgozjpyog6mjqsbr \ |
等待集群配置好既可以使用 node 节点。
1 | kubectl get nodes # 用来查看当前节点信息 |
安装 Helm
进入 https://github.com/helm/helm/releases 下载最新稳定版放入 /usr/local/bin/
即可。
1 | wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz |
安装负载均衡控制器 (安装一个即可)
安装 OpenELB
1 | helm repo add kubesphere-stable https://charts.kubesphere.io/stable |
Layer2 模式
启用 kube-proxy strictARP
。
1 | kubectl edit configmap kube-proxy -n kube-system |
编辑 data.config.conf.ipvs.strictARP
为:
1 | ipvs: |
重启 kube-proxy。
1 | kubectl rollout restart daemonset kube-proxy -n kube-system |
设置 NIC。
1 | kubectl annotate nodes k8s-master layer2.porter.kubesphere.io/v1alpha1="192.168.1.60" |
创建 EIP 地址池 porter-layer2-eip.yaml
。
1 | apiVersion: network.kubesphere.io/v1alpha2 |
使配置文件生效。
1 | kubectl apply -f porter-layer2-eip.yaml |
安装 MetalLB
1 | helm repo add metallb https://metallb.github.io/metallb |
创建配置文件 ip-pool.yaml。
1 | apiVersion: metallb.io/v1beta1 |
创建配置文件 layer2.yaml。
1 | apiVersion: metallb.io/v1beta1 |
测试 LB 是否正常
1 | apiVersion: apps/v1 |
检查 svc 的 EXTERNAL-IP
是否正常。ip neigh
可以查看 ip 和 mac 地址绑定关系。
安装 metrics-server 支持 kubectl top
Value.yaml 文件内容。
1 | args: |
使用 value.yaml 来安装。
1 | helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/ |
查看 k8s 指标。
1 | kubectl top node |
安装 Ingress NGINX Controller 来支持 ingress
1 | helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace |
k8s 基本功能基本已经都安装好了。Enjoy it !