这里写目录标题
服务器设置
本文基于最新的Kubernetes 1.24集群进行搭建,容器运行时不使用docker,而使用Containerd作为集群的运行时。
所有节点都需要进行操作,具体含义这里不再赘述,有兴趣的可以自行查阅相关资料。
swapoff -a
ufw disable
systemctl stop firewalld.service
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- nf_conntrack
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl -p /etc/sysctl.conf && sysctl --system
安装配置Containerd
所有节点都需要操作
apt-get update && sudo apt-get install -y containerd
mkdir -p /etc/containerd && containerd config default | sudo tee /etc/containerd/config.toml
这里我们需要修改/etc/containerd/config.toml
,修改sandbox_image
不然镜像没办法下载,具体调整为:
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
# 这里使用国内镜像
sandbox_image = "myifeng/k8s.gcr.io_pause:3.5"
之后进行重启,并设置开机自动启动
systemctl daemon-reload && systemctl enable containerd && systemctl restart containerd
需要调整存储目录的可以使用一下方式
安装配置 kubelet kubeadm kubectl
所有节点都需要进行操作
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
tee /etc/apt/sources.list.d/kubernetes.list <<'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update && apt-get install -y kubelet kubeadm kubectl
#使用containerd作为运行时
crictl config runtime-endpoint /run/containerd/containerd.sock
## 文件存储目录调整(这一步可以省略)
cat << EOF >> /etc/default/kubelet
KUBELET_EXTRA_ARGS=--root-dir=/www/kubelet
EOF
# 重启,并设置开机启动
systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet
Master节点初始化集群
这里配置镜像使用aliyun的仓库,也可以使用其他的仓库
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
kubeadm config print init-defaults > kubeadm-init-config.yaml
vim kubeadm-init-config.yaml
# 调整advertiseAddress内网ip
# 调整imageRepository为registry.aliyuncs.com/google_containers
# 设置podSubnet: 10.244.0.0/16
kubeadm init --config=kubeadm-init-config.yaml --upload-certs
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl edit configmap -n kube-system kube-proxy
# 找到这里,如果没修改过的,此处应当是空,直接写入ipvs即可
mode: "ipvs"
节点加入集群
节点使用上一步出现的join命令即可加入集群,每个节点都来操作一遍。
安装calico网络插件
下载 calico.yaml
# 修改IP 与 kubeadm-init-config.yaml的podSubnet: 10.244.0.0/16 保持一致
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
执行
kubectl apply -f calico.yaml
安装配置 metrics-server
Kubernetes支持HPA自动扩缩容,需要使用metrics-server
进行支持
下载 components.yaml
执行
kubectl apply -f components.yaml
安装ingress-controller
-
ingress-nginx官方获取最新的部署yaml文件
-
修改两个镜像为国内镜像
image: myifeng/registry.k8s.io_ingress-nginx_controller:v1.3.0
image: myifeng/registry.k8s.io_ingress-nginx_kube-webhook-certgen:v1.1.1
- 调整
Deployment/ingress-nginx-controller
为DaemonSet/ingress-nginx-controller
每个节点都部署一个controller
apiVersion: apps/v1
# 每个节点都部署
#kind: Deployment
kind: DaemonSet
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.3.0
name: ingress-nginx-controller
namespace: ingress-nginx
- 调整
DaemonSet/ingress-nginx-controller
增加hostNetwork: true
# 使用本机端口
hostNetwork: true
dnsPolicy: ClusterFirst
nodeSelector:
kubernetes.io/os: linux
serviceAccountName: ingress-nginx
terminationGracePeriodSeconds: 300
- 调整
ingress-nginx-controller
Service
,由type: LoadBalancer
改为type: NodePort
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.3.0
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
externalTrafficPolicy: Local
ports:
- appProtocol: http
name: http
port: 80
protocol: TCP
targetPort: http
- appProtocol: https
name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
# 使用本地端口
type: NodePort
结束
执行完以上步骤,即可搭建完成k8s集群,可以部署自己的应用,正常使用了。如有问题,欢迎留言讨论。