kind集群配置

654 阅读3分钟

配置podman

宿主机配置

主机需要使用 cgroup v 2 运行。 确保docker info命令的结果包含 Cgroup Version: 2。如果打印 Cgroup Version: 1, 尝试将GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"添加到/etc/default/grub并运行sudo update-grub启用 cgroup v 2。

另外,根据主机配置,可能需要以下步骤:

  • 使用以下内容创建 /etc/systemd/system/user@.service.d/delegate.conf,然后运行 sudo systemctl daemon reload:
[Service]
Delegate=yes

(默认情况下未启用此功能,因为委派 cpu 控制器对运行时的影响仍然太高,请注意更改此配置可能会影响系统性能。)

  • 创建/etc/modules-load.d/iptables.conf包含以下内容:
ip6_tables
ip6table_nat
ip_tables
iptable_nat

修改node容器pid限制

# 提示容器pid限制到1200000,否则默认pid限制将导致pod启动多了后一直oom重启,然我郁闷很久的问题
docker update --pids-limit=1200000 <container-name>

使用podman

kind命令前增加KIND_EXPERIMENTAL_PROVIDER=podman就会操作podman环境

KIND_EXPERIMENTAL_PROVIDER=podman kind create cluster xxx

podman镜像和容器与docker是隔离的,所以docker images查看的image在podman images不一定有。查看podman的信息不要用docker去操作,还好podman与docker的命令基本雷同,可以按照操作docker的习惯去操作podman。

启用Wasm

部署kwasm,使集群可运行wasm podQuickstart - Kwasm

更换CNI

  1. 网络配置
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  # the default CNI will not be installed
  disableDefaultCNI: true
  # setting pod CIDR
  podSubnet: "192.168.0.0/16"
  1. 添加node-labels
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  1. 部署Calico

参考此链接进行部署 Quickstart for Calico on Kubernetes | Calico Documentation (tigera.io)

The CustomResourceDefinition "installations.operator.tigera.io" is invalid: metadata.annotations: Too long: must have at most 262144 bytes 出现这个错误命令后添加--server-side

设置LoadBalancer

1. 应用metallb metallb.universe.tf/installatio… 2. 设置dhcp,并应用

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: example
  namespace: metallb-system
spec:
  addresses:
  - 172.19.255.200-172.19.255.250
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: empty
  namespace: metallb-system

新版使用

go install sigs.k8s.io/cloud-provider-kind@latest

部署registry-proxy

ketches/registry-proxy: 在 Kubernetes 集群中部署 Registry Proxy,自动帮助您使用镜像代理服务拉取新创建的 Pod 中的外网容器镜像(仅限公有镜像)。 (github.com)

# 获取最近版本
export VERSION=$(curl -s https://api.github.com/repos/ketches/registry-proxy/releases/latest | jq -r .tag_name)
# 使用代理地址部署
kubectl apply -f https://ghproxy.ketches.cn/https://raw.githubusercontent.com/ketches/registry-proxy/$VERSION/deploy/manifests.yaml

部署nfs

安装nfs环境依赖

sudo dnf install -y install nfs-utils

配置nfs目录

# 创建共享目录
mkdir /data/nfs_dir
# 添加用户
sudo useradd nfsnobody
# 修改目录权限
chown nfsnobody:nfsnobody /data/nfs_dir

修改nfs配置

修改vi /etc/exports文件

/data/nfs_dir 10.89.0.0/24(rw,sync,all_squash,anonuid=1002,anongid=1002,no_subtree_check)
  • 10.89.0.0/24:可以访问 NFS 存储的客户端 IP 地址
  • rw:读写操作,客户端机器拥有对卷的读写权限
  • sync:内存数据实时写入磁盘,性能会有所限制
  • all_squash:NFS 客户端上的所有用户在使用共享目录时都会被转换为一个普通用户的权限
  • anonuid:转换后的用户权限 ID,对应的操作系统的 nfsnobody 用户
  • anongid:转换后的组权限 ID,对应的操作系统的 nfsnobody 组
  • no_subtree_check:不检查客户端请求的子目录是否在共享目录的子树范围内,也就是说即使输出目录是一个子目录,NFS 服务器也不检查其父目录的权限,这样可以提高效率。
# nfs服务设置开机启动
sudo systemctl enable nfs-server --now

添加helm repo

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
helm repo update

设置chart配置

storageClass:
  name: nfs-sc  # 设置sc 名称
  defaultClass: true  # 设置默认sc
  provisionerName: nfs-subdir-external-provisioner  # 指定provisioner名称

nfs:
  server: 10.89.0.1  # 设置nfs服务地址
  path: /data/nfs_dir  # 设置nfs共享路径

部署nfs chart

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --values nfs-values.yaml -n nfs-system --create-namespace

安装cert-manager

# 添加 Jetstack Helm 仓库  
helm repo add jetstack https://charts.jetstack.io

# 更新本地 Helm Chart 仓库缓存  
helm repo update  
      
# 安装 cert-manager Helm Chart  
helm install cert-manager jetstack/cert-manager \  
--namespace cert-manager \  
--create-namespace \  
--version v1.11.0 \
--set installCRDs=true