华为云云原生之多云管理利器Karmada从0到1的实操【与云原生的故事】

举报
愚公搬代码 发表于 2022/04/28 11:07:17 2022/04/28
【摘要】 Karmada 的架构在很多方面类似于单个Kubernetes集群。它们都有一个控制平面、一个API服务器、一个调度程序和一组控制器。而且Karmada完全兼容K8S原生API操作,便于各种k8s集群的接入,为多云和混合云架构保驾护航。

一、Karmada的概念

1.Karmada是什么

Karmada(Kubernetes Armada)是一个Kubernetes管理系统,使您能够跨多个Kubernetes集群和云运行云原生应用程序,而无需更改您的应用程序。通过使用Kubernetes原生API并提供高级调度功能,Karmada实现了真正开放的多云Kubernetes。

Karmada旨在为多云和混合云场景中的多集群应用程序管理提供自动化功能,具有集中式多云管理,高可用性,故障恢复和流量调度等关键功能。

官方网站:https://karmada.io/

代码地址:https://github.com/karmada-io/karmada

2.Karmada的诞生背景

Karmada项目由华为云、工商银行、小红书、中国一汽等8家企业联合发起,沉淀了各企业在多云管理领域的丰富积累,于2021年4月25日在华为开发者大会2021(HDC.Cloud)上正式宣布开源。同年9月,Karmada项目正式捐赠给云原生计算基金会CNCF,成为CNCF首个多云容器编排项目。Karmada项目的加入,也将CNCF的云原生版图进一步扩展至分布式云领域。

CNCF总经理Priyanka Sharma对此表示:“华为一直是云原生社区与开发者生态的重要参与者,Karmada对所有企业构建多云业务架构至关重要,希望未来CNCF与华为云继续密切合作,持续帮助广大云原生开发者。”

Karmada自开源以来受到了广泛的关注和支持,目前在代码托管平台上已有超过30家大型企业/机构/高校参与社区开发及贡献。

3.Karmada的优势

Karmada结合了华为云容器平台MCP以及Kubernetes Federation核心实践,并融入了众多新技术:包括Kubernetes原生API支持、多层级高可用部署、多集群自动故障迁移、多集群应用自动伸缩、多集群服务发现等,并且提供原生Kubernetes平滑演进路径,让基于Karmada的多云方案无缝融入云原生技术生态,为企业提供从单集群到多云架构的平滑演进方案。Karmada的优势主要有以下几点:

1、K8s原生API兼容

  • 既有应用配置及基础设施无需改造,由单集群架构平滑升级到多集群(多云)架构。
  • 无缝集成Kubernetes现有工具链生态。

2、开箱即用

  • 面向多场景的内置策略集,包括两地三中心、同城双活、异地容灾等。
  • 支持应用的跨集群上的自动伸缩、故障迁移和负载均衡。

3、避免供应商锁定

  • 与主流云提供商集成。
  • 自动分配,跨集群迁移。
  • 不受专有供应商编排的约束。

4、集中管理

  • 与位置无关的群集管理。
  • 支持公有云、本地或边缘的集群。

5、富有成效的多集群调度策略

  • 多集群亲和性调度、应用跨集群拆分、资源重新平衡。
  • 多维度多层次的高可用部署:区域/可用区/集群/供应商等。

6、开放和中立

  • 由互联网、金融、制造、电信、云提供商等共同发起。
  • 使用CNCF实现开放式治理的目标。

二、Karmada的架构

1.Karmada控制平面的组成

Karmada控制平面由以下组件组成:

  • Karmada API Server
  • Karmada Controller Manager
  • Karmada Scheduler

在这里插入图片描述

组件 原生 说明
etcd 存储karmada API对象,API服务器是所有其他组件与之通信的REST端点,Karmada控制器管理器根据您通过API服务器创建的API对象执行操作
kube-apiserver API Server是所有其他组件都可以与之通信的REST端点
kube-controller-manager Controller Manager将根据您通过API服务器创建的API对象执行操作
karmada-controller-manager karmada karmada controller-manager,监听相关资源,创建ResourceBinding及ClusterResourceBinding,更新work,同步集群间资源
karmada-scheduler karmada 加载Policy,分析资源,更新work
karmada-webhook karmada karmada资源校验
karmada-agent karmada 取决于Cluster的同步模式,若是push模式,则不需要部署,否则需要部署到管理的集群中

Karmada Controller Manager运行各种控制器,控制器监视karmada对象,然后与底层集群的API服务器通信以创建常规的Kubernetes资源。

控制器名称 说明
集群控制器 将kubernetes集群附加到Karmada,用于通过创建集群对象来管理集群的生命周期。
策略控制器 控制器监视传播策略对象。添加传播策略对象时,它会选择一组与资源选择器匹配的资源,并为每个资源对象创建资源绑定。
绑定控制器 控制器监视资源绑定对象,并使用单个资源清单创建与每个群集对应的工作对象。
执行控制器 控制器监视工作对象。创建Work对象时,它会将资源分发到成员集群。

2.Karmada的Controller详解

Controller(控制器)在Kubernetes中是逻辑能力的主要体现所在,根据资源对象的状态来完成调和工作,让资源对象逐步接近期待的状态,这个就是Kubernetes的申明式特性。

在Karmada中,同样需要对Karmada自己的资源对象,实现对应的申明式特性,这就需要实现对应的Controller。在Karmada中目前的版本中有11个Controllers,接下来就从每一个控制器所负责的资源对象,以及原理来分析一下,在Karmada中是怎样完成多云能力的。

11种控制器结构图如下:
在这里插入图片描述

2.1 Cluster Controller

cluster controller主要就是处理Cluster资源对象的逻辑,负责处理Cluster对应需要的关联资源。

在这里插入图片描述

2.2 Cluster status controller

cluster status controller主要就是处理cluster status资源对象的逻辑,用来收集Cluster的状态,保存到Cluster的status字段中,同步上报到Karmada的控制平面中。
在这里插入图片描述

2.3 namespace sync controller

namespace sync controller主要就是处理namespace资源对象的逻辑,负责将Karmada控制平面创建的namespace在集群中同步创建出来。

在这里插入图片描述

2.4 Resourse Template controller

detector模块中包含了通用controller负责resource template的Kubernetes资源对象的调和处理逻辑,以及匹配PropagationPolicy。主要就是处理PropagationPolicy资源对象的逻辑,来派生出资源对象对应的ResourceBinding对象。

在这里插入图片描述

2.5 Binding controller

binding controller主要就是处理ResourceBinding资源对象的增删改逻辑,ResourceBinding的调和能力是派生出work对象,work对象是和特定集群关联的。一个work只能属于一个集群,代表一个集群的资源对象的模型封装。
在这里插入图片描述

2.6 execution controller

execution controller主要就是处理Work资源对象的增删改逻辑,用于处理Work,将Work负责的Kubernetes资源对象在对应的集群上创建出来。
在这里插入图片描述

2.7 work status controller

work status controller主要就是处理Work资源对象的状态逻辑,负责收集Work的状态,也就是Work对应的资源对象的状态,只是这个状态是保存在Work的status字段里的。
在这里插入图片描述

2.8 serviceexport controller

serviceexport controller主要就是处理serviceexport资源对象的状态逻辑,将需要被其它集群发现的服务暴露出来。
在这里插入图片描述

2.9 endpointslice controller

endpointslice controller主要根据serviceexport资源对象对应到处的Service,Service对应的endpointslice上报到Karmada的控制面。
在这里插入图片描述

2.10 serviceimport controller

serviceimport controller主要负责根据ServiceExport暴露出来的Service,在自己负责的集群中创建对应的service,注意service的名称不是完全一样的,同时在自己负责的集群中也创建对应的EndpointSlice,这个EndpointSlice的数据就是来源于EndpointSlice controller中上报到karmada控制平面的EndpointSlice对象,具体是通过在karmada-webhook中给ServiceImport的PropagationPolicy中增加了EndpointSlice的下发能力。
在这里插入图片描述

2.11 hpa controller

hpa controller主要负责将Karmada控制面中创建的HPA对象通过创建Work的方式下发到对应的集群中。
在这里插入图片描述

三、karmada安装

1.安装Docker

Docker的相关文档网站如下:

1.1 Docker的架构

Docker的架构设计分为三个组件:一个客户端,一个REST API和一个服务器(守护进程):

  • Client:与REST API交互。主要目的是允许用户连接守护进程。
  • REST API:充当客户端和服务器之间的接口,实现通信。
  • 守护进程:负责实际管理容器-启动,停止等。守护进程监听来自docker客户端的API请求。

1.2 系统环境

本人使用的是ubuntu22.04 LTS版本,查看系统版本命令如下

lsb_release -a
cat /proc/version

在这里插入图片描述

1.3 使用仓库安装

如果以前有安装需要先卸载旧版Docker,docker,docker.io,docker-engine。

卸载旧版本的命令如下:

sudo apt-get remove docker docker-engine docker.io containerd runc

在这里插入图片描述

1.3.1 设置仓库

更新apt-get

sudo apt-get update

在这里插入图片描述

安装包使得apt可以使用https

sudo apt-get install apt-transport-https ca-certificates software-properties-common curl

在这里插入图片描述

1.3.2 添加GPG密钥,并添加Docker-ce软件源

添加清华GPG密钥

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

或者添加阿里云GPG密钥

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

在这里插入图片描述

添加清华Docker-ce软件源

sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

或者添加阿里云Docker-ce 软件源

sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

在这里插入图片描述
如果出现错误可以用以下命令删除重新执行命令

#注意:添加错了可以用以下命令删除
#查询keyid,下图
sudo apt-key list
#keyid 就是90那一串
sudo apt-key del <keyid>
#加参数-r可以移除
sudo add-apt-repository -r "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

1.3.3 安装Docker-ce

再次更新系统

sudo apt-get update

在这里插入图片描述
安装docker-ce软件

sudo apt-get install docker-ce docker-ce-cli containerd.io -y

在这里插入图片描述

1.3.4 测试Docker是否安装成功

查看是否启动

ps aux|grep docker

在这里插入图片描述

测试运行容器

sudo docker run hello-world

在这里插入图片描述

1.4 配置国内镜像源

{
    "registry-mirrors":[
        "http://hub-mirror.c.163.com""https://docker.mirrors.ustc.edu.cn""https://registry.docker-cn.com"
    ]"dns":[
        "114.114.114.114""8.8.8.8"
    ]
}

1.5 添加当前用户到 docker 用户组,可以不用 sudo 运行 docker

将当前用户添加到docker组

sudo gpasswd -a ${USER} docker

在这里插入图片描述
重新登录或者用以下命令切换到docker组

newgrp - docker

在这里插入图片描述
重启docker服务

sudo service docker restart

在这里插入图片描述
不加sudo直接执行docker命令检查效果

docker ps

在这里插入图片描述

2.安装GO

2.1 下载并安装GO

sudo apt-get install golang-go

在这里插入图片描述

2.2 测试GO是否安装成功

go version

在这里插入图片描述

2.3 设置go环境为国内源

go env -w GOPROXY=goproxy.cn #设置go环境为国内源

3.安装k8s

3.1 前置条件

K8S官网:https://kubernetes.io/docs/setup/

最新版高可用安装:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/

3.1.1 关闭swap内存

这个swap其实可以类比成windows上的虚拟内存,它可以让服务器在内存吃满的情况下可以保持低效运行,而不是直接卡死。但是k8s的较新版本都要求关闭swap。所以咱们直接动手,修改/etc/fstab文件:

sudo gedit /etc/fstab

在这里插入图片描述

3.1.2 关闭防火墙

ubuntu 查看防火墙命令,ufw status可查看状态,ubuntu22.04默认全部关闭,无需设置。

设置命令如下:

sudo ufw status #查看防火墙状态
sudo ufw disable
sudo swapoff -a #临时禁止

在这里插入图片描述

3.1.3 确保时区和时间正确

systemctl start chrony
systemctl enable chrony
chronyc sources #看连接状态
chronyc tracking #看同步状态,时间差
chronyc -a makestep #立即同步时间

在这里插入图片描述

3.1.3 主机名和hosts设置

非必须,但是为了直观方便管理,建议设置。

在宿主机分别设置主机名:k8s-master01,k8s-node01

hostnamectl set-hostname k8s-master01

hosts设置

sudo gedit /etc/hosts

#配置host如下
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.16.133 k8s-master01.ilinux.io k8s-master01 k8s-api.ilinux.io
192.168.16.134 k8s-node01.ilinux.io k8s-node01
199.232.96.133 raw.githubusercontent.com

在这里插入图片描述

3.2 安装组件

3.2.1 更改docker默认驱动为systemd

为防止初始化出现一系列的错误,请检查docker和kubectl驱动是否一致,否则kubectl没法启动造成报错。版本不一样,docker有些为cgroupfs,而kubectl默认驱动为systemd,所以需要更改docker驱动。

可查看自己docker驱动命令:

sudo docker info|grep Driver

在这里插入图片描述
如果不是systemd需要执行以下命令:

#编辑创建文件
sudo gedit /etc/docker/daemon.json
#添加内容
{
    "registry-mirrors":[
        "http://hub-mirror.c.163.com""https://docker.mirrors.ustc.edu.cn""https://registry.docker-cn.com"
    ]"exec-opts":["native.cgroupdriver=systemd"]"dns":[
        "114.114.114.114""8.8.8.8"
    ]
}

在这里插入图片描述
重启docker

sudo systemctl restart docker.service

3.2.2 配置NAT转发

modprobe br_netfilter

cat /etc/profile

cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

sudo sysctl -p /etc/sysctl.d/k8s.conf #执行同步参数

在这里插入图片描述

3.2.2 SSH密钥免密

sudo apt-get install openssh-server
ssh-keygen -t rsa

在这里插入图片描述
此时会在/home/ubuntu/.ssh目录下生成密钥对

ll .ssh

在这里插入图片描述
上传公钥到对应服务器

ssh-copy-id 192.168.16.133
ssh-copy-id 192.168.16.134

image.png

3.3 更新源

sudo apt-get update

在这里插入图片描述

3.4 下载公开签名秘钥、并添加k8s库

国外 :下载 Google Cloud 公开签名秘钥:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

国内:可以用阿里源即可:

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF 
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

3.5 更新 apt 包索引

sudo apt-get update

在这里插入图片描述

3.6 安装 kubelet、kubeadm 和 kubectl,并锁定其版本

sudo apt-get install -y kubectl kubelet kubeadm

sudo apt-mark hold kubelet kubeadm kubectl
  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动Pod和容器等。
  • kubectl:用来与集群通信的命令行工具。

在这里插入图片描述

3.7 配置kubectl开机启动

systemctl daemon-reload
systemctl enable kubelet

在这里插入图片描述

3.8 测试kubectl是否安装成功

kubelet --version
kubectl version --client
kubeadm version

在这里插入图片描述

3.9 初始化主节点master

拉取相关包

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

在这里插入图片描述

初始化主节点master

kubeadm init \
--apiserver-advertise-address=192.168.16.133 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16

异常情况分析:

错误提示1:

[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.

原因:kubectl没法启动,journalctl -xe查看启动错误信息。

journalctl -xe
#信息显示docker和kubectel驱动不一致
kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""

解决方案:k8s建议systemd驱动,所以更改docker驱动即可,编辑/etc/docker/daemon.json(没有就新建一个),添加如下启动项参数即可:

#编辑创建文件
sudo vim  /etc/docker/daemon.json
#添加内容
{
  "exec-opts":["native.cgroupdriver=systemd"]
}

重启docker和kubectl

#重启docker
sudo systemctl restart docker.service
#重载kubectl
sudo systemctl daemon-reload
#重启kubectl
sudo systemctl restart kubelet.service
#查看kubectl服务状态恢复正常
sudo systemctl status kubelet.service

错误提示2:

error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
	[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
	[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
	[ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

原因:初始化生产的文件,重新初始化,需要删除即可

rm -fr /etc/kubernetes/manifests/*

错误提示3:

error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR Port-10250]: Port 10250 is in use

解决方法:重置配置

sudo kubeadm reset

3.10 配置kubernetes-admin来运行

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile

在这里插入图片描述

3.11 集群部署网络插件

安装cni插件:

mkdir -p go/src/github.com/containernetworking/
cd go/src/github.com/containernetworking/
git clone https://github.com/containernetworking/plugins.git
git clone https://github.com/containernetworking/cni.git
cd plugins
./build_linux.sh
cd ../cni/cnitool
go build cnitool.go

在这里插入图片描述

部署网络插件命令如下:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在这里插入图片描述

4.安装简易k8s开发集群管理工具:kind

Kind是Kubernetes In Docker的缩写,顾名思义是使用Docker容器作为Node并将Kubernetes部署至其中的一个工具。官方文档中也把Kind作为一种本地集群搭建的工具进行推荐。

4.1 安装kind

GOPROXY=goproxy.cn go install sigs.k8s.io/kind@v0.12.0

在这里插入图片描述

4.2 环境变量配置

sudo cp $(go env GOPATH)/bin/kind /usr/local/bin

在这里插入图片描述
kind使用一个容器来模拟一个node,在容器内部使用systemd托管kubelet和containerd(不是docker),然后通过被托管的kubelet启动其他k8s组件,比如kube-apiserver、etcd、CNI等跑起来。

由于kind使用containerd而非docker作为容器运行时,要查看kind启动的k8s节点内部容器运行情况,需要使用containerd的cli客户端ctr。可以通过下面这条命令查看后续步骤中karmada调用kind启动的单节点k8s集群内部容器的运行情况:

docker exec karmada-host-control-plane ctr --namespace k8s.io containers ls

注意点:ctr的flag --namespace不是k8s里的namespace,也不是linux内核支持的namespace,感兴趣的同学可以查看containerd的namespace相关概念

4.3 测试kind是否安装成功

kind --version

在这里插入图片描述

5.安装karmada控制面

karmada项目地址:https://gitcode.net/mirrors/karmada-io/karmada?utm_source=csdn_github_accelerator

5.1 先行条件

安装karmada需要先安装以下工具:

  • make
  • gcc
  • kubectl
  • go
  • kind
  • git

5.2 安装karmada

5.2.1 下载karmada源码

git clone https://github.com/karmada-io/karmada.git karmada-io/karmada
cd karmada-io/karmada

在这里插入图片描述

5.2.2 安装karmada控制面

因为安装中会无法安装k8s.gcr.io相关软件,把替源码中的k8s.gcr.io换成registry.cn-hangzhou.aliyuncs.com/google_containers就可以部署

执行安装命令如下:

hack/local-up-karmada.sh

安装步骤详解:

  1. 检查go、kind等工具是否已经存在
  2. 调用kind创建host k8s集群,集群版本默认为1.23.4,与karmada重用的k8s组件(kube-apiserver、kube-controllermanager)版本一致
  3. build karmada控制面可执行文件及容器镜像,build结束后本地可以找到如下镜像:karmada-agent、karmada-webhook、karmada-scheduler、karmada-controller-manager
  4. 部署karmada控制面组件到host集群
  5. 创建CRD,也就是karmada自定义的多云工作负载API资源,包含:propgation policy,override policy,work,resource binding等
  6. 创建webhook
  7. 部署完成后,形成kubeconfig文件$HOME/kube/karmada.config,包含karmada-host和karmada-apiserver两个context,分别对应支撑karmada控制面运行的host集群,以及karmada控制面本身

安装成功后会出现如下信息:

Local Karmada is running.

To start using your karmada, run:
  export KUBECONFIG="$HOME/.kube/karmada.config"
Please use 'kubectl config use-context karmada-host/karmada-apiserver' to switch the host and control plane cluster.

To manage your member clusters, run:
  export KUBECONFIG="$HOME/.kube/members.config"
Please use 'kubectl config use-context member1/member2/member3' to switch to the different member cluster.

5.3 查看karmada控制面组成

使用karmada管理的多云环境包含两类集群:

  • host集群:即由karmada控制面构成的集群,接受用户提交的工作负载部署需求,将之同步到member集群,并从member集群同步工作负载后续的运行状况。
  • member集群:由一个或多个k8s集群构成,负责运行用户提交的工作负载

5.3.1 切换到karmada-host

kubectl config use-context karmada-host #切换到karmada-host控制面

5.3.2 获取组件列表

kubectl get po --all-namespaces

5.3.3 集群的加入

集群加入karmada步骤如下:

  1. 执行hack/create-cluster.sh member1 $HOME/.kube/karmada.config创建新的集群member1
  2. 执行kubectl config use-context karmada-apiserver切换到karmada控制面
  3. 执行karmadactl join member1 --cluster-kubeconfig=$HOME/.kube/karmada.config以push的方式把member1加入karmada集群

三、karmada实战案例

相关视频链接:https://live.csdn.net/v/202945?spm=1001.2014.3001.5501

实操步骤:

1、执行kubectl config use-context karmada-apiserver切换到karmada控制面。
2、执行kubectl create -f samples/nginx/deployment.yaml创建deployment资源,如前面所述,由于kamada控制面没有部署deployment controller,nginx不会在karmada控制面所在集群跑起来,而是仅仅保存在etcd里,这时候如果去member1集群查看pod资源的情况,可以发现nginx也没有在member1集群中运行起来。
3、执行kubectl create -f samples/nginx/propagationpolicy.yaml,定义如下的propgation policy:

apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx-propagation
spec:
resourceSelectors:
	- apiVersion: apps/v1
	  kind: Deployment
	  name: nginx
placement:
	clusterAffinity:
	  clusterNames:
		- member1

这个progation policy将之前部署的nginx deployment资源(由resourceSelectors指定)同步到member1集群(由placement指定)中。

这时不用切换到member1 context,对karmada控制面执行kubectl get deploy可以看到名叫nginx的deployment已经正常运行:

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           21m

上述结果说明karmada有能力从member集群同步工作负载状态到host集群。作为验证,我们可以切换到member1集群,执行kubectl get po可以看到deployment对应的nginx pod已经在member1集群内正常运行:

NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-7tgmb   1/1     Running   0          8m27s

总结

Karmada 的架构在很多方面类似于单个Kubernetes集群。它们都有一个控制平面、一个API服务器、一个调度程序和一组控制器。而且Karmada完全兼容K8S原生API操作,便于各种k8s集群的接入,为多云和混合云架构保驾护航。


【与云原生的故事】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/345260

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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