Ubuntu基于Containerd搭建Kubernetes集群v1.24最新版

服务器设置

本文基于最新的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

  1. ingress-nginx官方获取最新的部署yaml文件

  2. 修改两个镜像为国内镜像

image: myifeng/registry.k8s.io_ingress-nginx_controller:v1.3.0
image: myifeng/registry.k8s.io_ingress-nginx_kube-webhook-certgen:v1.1.1
  1. 调整 Deployment/ingress-nginx-controllerDaemonSet/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
  1. 调整 DaemonSet/ingress-nginx-controller 增加 hostNetwork: true
# 使用本机端口
hostNetwork: true
dnsPolicy: ClusterFirst
nodeSelector:
  kubernetes.io/os: linux
serviceAccountName: ingress-nginx
terminationGracePeriodSeconds: 300
  1. 调整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集群,可以部署自己的应用,正常使用了。如有问题,欢迎留言讨论。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

myifengs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值