鲲鹏EulerOS搭建Cluster API Provider开发测试环境

举报
SSK9 发表于 2024/12/26 09:39:26 2024/12/26
【摘要】 Cluster API是一个Kubernetes项目,它将声明式Kubernetes风格的API用于集群的创建、配置和管理。它通过使用时CustomResourceDefinitions(CRDs)来扩展被Kubernetes API Server暴露的API来实现这些功能,从而允许用户创建新资源,例如集群(指Kubernetes集群)和Machine(指组成集群的节点的Machine)。环...

Cluster API是一个Kubernetes项目,它将声明式Kubernetes风格的API用于集群的创建、配置和管理。它通过使用时CustomResourceDefinitions(CRDs)来扩展被Kubernetes API Server暴露的API来实现这些功能,从而允许用户创建新资源,例如集群(指Kubernetes集群)和Machine(指组成集群的节点的Machine)。

环境工具:

工具 版本 说明
cluster api v1.9.3
kind v0.26.0
kubectl v1.32.0
docker v27.4.1 本身docker比较旧,装一个相对新点的
Huawei Cloud EulerOS 2.0 Standard 64 bit for ARM 鲲鹏 ARM64

安装工具

cluster-api安装

ARM64:

curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.9.2/clusterctl-linux-arm64 -o clusterctl

Install clusterctl:

sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl

安装kind

需要安装Go或到kind releases下载

go install sigs.k8s.io/kind@v0.26.0

安装kubectl

下载最新稳定版:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"

安装kubectl:

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

调整环境

在部署过程中遇到的2个系统问题,一个镜像问题

  1. cgroup版本问题
  2. Failed to create inotify object: Too many open files
  3. docker镜像拉取不了

调整cgroup版本

查看cgroup版本:

  • tmpfs (v1)
  • cgroup2fs (v2)
stat -fc %T /sys/fs/cgroup/

将cgroup版本改成V2:

grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"

reboot

将cgroup driver改成systemd,k8s推荐systemd:

{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "features": {
        "cgroup2": true
    }
}

调整inotify限制

临时修改:

sysctl fs.inotify.max_user_watches=1048576
sysctl fs.inotify.max_user_instances=8192

添加或更新 /etc/sysctl.conf:

fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576

使用其他镜像源下载

使用超能力

开始部署

  1. 创建集群

    cat > kind-cluster-with-extramounts.yaml <<EOF
    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    networking:
      ipFamily: dual
    nodes:
    - role: control-plane
      extraMounts:
        - hostPath: /var/run/docker.sock
          containerPath: /var/run/docker.sock
    EOF
    
    kind create cluster --config kind-cluster-with-extramounts.yaml
    
  2. 初始化集群

    export CLUSTER_TOPOLOGY=true
    
    clusterctl init --infrastructure docker
    
  3. 如果有下载不了的,替换镜像源或先下载到本地并替换

    • 使用其他镜像源下载镜像
    docker pull gcr.kubesre.xyz/k8s-staging-cluster-api/capd-manager:v1.9.3
    docker pull k8s.kubesre.xyz/cluster-api/kubeadm-bootstrap-controller:v1.9.3
    docker pull k8s.kubesre.xyz/cluster-api/kubeadm-control-plane-controller:v1.9.3
    docker pull k8s.kubesre.xyz/cluster-api/cluster-api-controller:v1.9.3
    
    • 替换镜像
    kubectl set image deploy/capd-controller-manager -n capd-system manager=gcr.kubesre.xyz/k8s-staging-cluster-api/capd-manager:v1.9.3
    kubectl set image deploy/capi-kubeadm-bootstrap-controller-manager -n capi-kubeadm-bootstrap-system manager=k8s.kubesre.xyz/cluster-api/kubeadm-bootstrap-controller:v1.9.3
    kubectl set image deploy/capi-kubeadm-control-plane-controller-manager -n capi-kubeadm-control-plane-system manager=k8s.kubesre.xyz/cluster-api/kubeadm-control-plane-controller:v1.9.3
    kubectl set image deploy/capi-controller-manager -n capi-system manager=k8s.kubesre.xyz/cluster-api/cluster-api-controller:v1.9.3
    
    • 查看部署
    kubectl get deploy -A -o wide
    
  4. 创建负载集群

    • 设置负载集群环境变量:
    # The list of service CIDR, default ["10.128.0.0/12"]
    export SERVICE_CIDR=["10.96.0.0/12"]
    
    # The list of pod CIDR, default ["192.168.0.0/16"]
    export POD_CIDR=["192.168.0.0/16"]
    
    # The service domain, default "cluster.local"
    export SERVICE_DOMAIN="k8s.test"
    
    • 生成负载集群配置文件:
    clusterctl generate cluster capi-quickstart --flavor development \
    --kubernetes-version v1.32.0 \
    --control-plane-machine-count=3 \
    --worker-machine-count=3 \
    > capi-quickstart.yaml
    
    • 创建负载集群:
    kubectl apply -f capi-quickstart.yaml
    
    • 查看集群情况
    kubectl get cluster
    
    clusterctl describe cluster capi-quickstart
    
    kubectl get kubeadmcontrolplane
    
    • 导出负载集群的kubeconfig
    kind get kubeconfig --name capi-quickstart > capi-quickstart.kubeconfig
    
  5. 安装CNI插件

    • 安装calico,可能有镜像下载问题,请用超能力
    kubectl --kubeconfig=./capi-quickstart.kubeconfig \
    apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
    
    • 查看集群节点,所有节点ready,集群启动成功
    kubectl --kubeconfig=./capi-quickstart.kubeconfig get nodes
    
  6. 删除集群

    kind create cluster --config kind-cluster-with-extramounts.yaml
    
    kind delete cluster --name kind-kind
    

接下来,使用kubebulder创建Operator,然后将Operator安装到kind创建的集群中做测试开发。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。