配置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
- 网络配置
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"
- 添加node-labels
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
- 部署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
# 获取最近版本
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