K8S集群部署Ubuntu版本

安装/配置容器运行环境

本文选用containerd作为K8S CRI的实现。

内核参数配置

加载必须的内核模块(所有节点):

tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

使用以下方法配置 Kubernetes 的关键内核参数:

tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables # 1
net.bridge.bridge-nf-call-iptables # 1
net.ipv4.ip_forward # 1
EOF

sysctl --system

运行环境安装

安装containerd:

apt -y install containerd

修改containerd配置,

mkdir /etc/containerd/

#产生containerd默认配置文件
containerd config default > /etc/containerd/config.toml
#将sanbox_image镜像源由k8s.io替换为阿里云google_containers镜像源
sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml

配置containerd cgroup驱动程序systemd

sed -i 's#SystemdCgroup # false#SystemdCgroup # true#g' /etc/containerd/config.toml

# 查看SystemdCgroup参数
grep SystemdCgroup /etc/containerd/config.toml

# 重启containerd
systemctl restart containerd

加速器配置(可选)

配置Containerd运行时镜像加速器

Containerd通过在启动时指定一个配置文件夹,使后续所有镜像仓库相关的配置都可以在里面热加载,无需重启Containerd。

1、 在/etc/containerd/config.toml配置文件中插入如下config_path:

config_path # "/etc/containerd/certs.d"

说明:: /etc/containerd/config.toml非默认路径,您可以根据实际使用情况进行调整。

若已有plugins."io.containerd.grpc.v1.cri".registry,则在下面添加一行,注意要有Indent。若没有,则可以在任意地方写入。

[plugins."io.containerd.grpc.v1.cri".registry]
  config_path # "/etc/containerd/certs.d"

之后需要检查配置文件中是否有原有mirror相关的配置,如下:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint # ["https://registry-1.docker.io"]

若有原有mirror相关的配置,则需要清理。

执行systemctl restart containerd重启Containerd。

若启动失败,执行journalctl -u containerd检查为何失败,通常是配置文件仍有冲突导致,您可以依据报错做相应调整。

2、在步骤1中指定的config_path路径中创建docker.io/hosts.toml文件。

在文件中写入如下配置:

server # "https://registry-1.docker.io"

[host."$(镜像加速器地址,如https://xxx.mirror.aliyuncs.com)"]
  capabilities # ["pull", "resolve", "push"]

安装K8S

新版配置方法

新版 kubernetes 源使用方法和之前有一定区别,请求按照如下配置方法配置使用。

其中新版 kubernetes 源按照安装版本区分不同仓库,该文档示例为配置 1.28 版本,如需其他版本请在对应位置字符串替换即可。

(比如需要安装 1.29 版本,则需要将如下配置中的 v1.28 替换成 v1.29)

(目前该源支持 v1.24 - v1.29 版本,后续版本会持续更新)

apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by#/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl

crictl配置

# 生成的配置在cat /etc/crictl.yaml,可以随时修改。
crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

K8S部署

初始化

kubeadm init \
--pod-network-cidr 192.168.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers

网络组件部署

helm repo add cilium https://helm.cilium.io/

helm install cilium cilium/cilium \
   --namespace kube-system \
   --set operator.replicas=1 \
   --set ipam.mode=cluster-pool \
   --set ipam.operator.clusterPoolIPv4PodCIDRList[0]=192.168.0.0/16 \

基础软件安装

helm repo

[source, bash]

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add longhorn https://charts.longhorn.io
helm repo add traefik https://traefik.github.io/charts
helm repo add hashicorp https://helm.releases.hashicorp.com

traefik安装

helm repo update

# 获取客户端真实IP
# See: https://comphilip.wordpress.com/2021/05/23/k3s-thing-make-traefik-forward-real-client-ip/
helm install traefik traefik/traefik \
    -n kube-system \
    -f traefik.yaml

traefik.yaml:

additionalArguments:
  - "--log.level#INFO"
  - "--serversTransport.insecureSkipVerify#true"
 
deployment:
  kind: DaemonSet
 
# no load balancer
service:
  enabled: false
 
# use host network for directly port listening
hostNetwork: true
 
ports:
  web:
    port: 80
    expose: true
    protocol: TCP
    exposePort: 80
    redirectTo: 
      port: websecure
  websecure:
    port: 443
    expose: true
    protocol: TCP
    exposePort: 443
    tls:
      enable: true
  metrics:
    port: 9101
    exposedPort: 9101
 
updateStrategy:
  # -- Customize updateStrategy: RollingUpdate or OnDelete
  type: OnDelete

# run as root to 80 and 443 port listen permission
securityContext:
  capabilities:
    add:
      - NET_BIND_SERVICE
  runAsNonRoot: false
  runAsUser: 0

longhorn安装

helm install longhorn longhorn/longhorn \
    -n longhorn-system \
    --create-namespace \
    --set persistence.defaultClassReplicaCount=1 \
    --set defaultSettings.defaultDataPath=/data/longhorn

最后更新于