跳转到文档内容
版本:v1.4

v0.10 升级到 v1.0

遵循常规升级流程

升级后显著变化

引入 karmada-aggregated-apiserver 组件

在 v1.0.0 版本之前,我们使用 CRD 扩展 Cluster API, 从 v1.0.0 开始,我们使用 API Aggregation(AA) 进行扩展。

基于上述变化,将在升级期间执行以下操作:

步骤 1:停止 karmada-apiserver

通过将副本数更新为 0 可以停止 karmada-apiserver

步骤 2:从 ETCD 移除 Cluster CRD

通过运行以下命令直接从 ETCD 移除 Cluster CRD

etcdctl --cert="/etc/kubernetes/pki/etcd/karmada.crt" \
--key="/etc/kubernetes/pki/etcd/karmada.key" \
--cacert="/etc/kubernetes/pki/etcd/server-ca.crt" \
del /registry/apiextensions.k8s.io/customresourcedefinitions/clusters.cluster.karmada.io

注:此命令仅移除 CRD 资源,不会更改所有 CR(Cluster 对象)。 这就是为什么不通过 karmada-apiserver 移除 CRD 的原因。

步骤 3:为 karmada-aggregated-apiserver 准备证书

为了避免 CA 重用和冲突, 需创建 CA 签名程序并对证书签名以启用聚合层。

karmada-system 命名空间中更新 karmada-cert-secret Secret:

apiVersion: v1
kind: Secret
metadata:
name: karmada-cert-secret
namespace: karmada-system
type: Opaque
data:
...
+ front-proxy-ca.crt: |
+ {{front_proxy_ca_crt}}
+ front-proxy-client.crt: |
+ {{front_proxy_client_crt}}
+ front-proxy-client.key: |
+ {{front_proxy_client_key}}

然后更新 karmada-apiserver Deployment 的容器命令:

-            - --proxy-client-cert-file=/etc/kubernetes/pki/karmada.crt
- - --proxy-client-key-file=/etc/kubernetes/pki/karmada.key
+ - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
+ - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
- - --requestheader-client-ca-file=/etc/kubernetes/pki/server-ca.crt
+ - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt

更新之后,恢复 karmada-apiserver 实例的副本。

步骤 4:部署 karmada-aggregated-apiserver

通过以下清单(manifest)将 karmada-aggregated-apiserver 实例部署到你的 host cluster

展开查看 yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: karmada-aggregated-apiserver
namespace: karmada-system
labels:
app: karmada-aggregated-apiserver
apiserver: "true"
spec:
selector:
matchLabels:
app: karmada-aggregated-apiserver
apiserver: "true"
replicas: 1
template:
metadata:
labels:
app: karmada-aggregated-apiserver
apiserver: "true"
spec:
automountServiceAccountToken: false
containers:
- name: karmada-aggregated-apiserver
image: swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:v1.0.0
imagePullPolicy: IfNotPresent
volumeMounts:
- name: k8s-certs
mountPath: /etc/kubernetes/pki
readOnly: true
- name: kubeconfig
subPath: kubeconfig
mountPath: /etc/kubeconfig
command:
- /bin/karmada-aggregated-apiserver
- --kubeconfig=/etc/kubeconfig
- --authentication-kubeconfig=/etc/kubeconfig
- --authorization-kubeconfig=/etc/kubeconfig
- --karmada-config=/etc/kubeconfig
- --etcd-servers=https://etcd-client.karmada-system.svc.cluster.local:2379
- --etcd-cafile=/etc/kubernetes/pki/server-ca.crt
- --etcd-certfile=/etc/kubernetes/pki/karmada.crt
- --etcd-keyfile=/etc/kubernetes/pki/karmada.key
- --tls-cert-file=/etc/kubernetes/pki/karmada.crt
- --tls-private-key-file=/etc/kubernetes/pki/karmada.key
- --audit-log-path=-
- --feature-gates=APIPriorityAndFairness=false
- --audit-log-maxage=0
- --audit-log-maxbackup=0
resources:
requests:
cpu: 100m
volumes:
- name: k8s-certs
secret:
secretName: karmada-cert-secret
- name: kubeconfig
secret:
secretName: kubeconfig
---
apiVersion: v1
kind: Service
metadata:
name: karmada-aggregated-apiserver
namespace: karmada-system
labels:
app: karmada-aggregated-apiserver
apiserver: "true"
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
app: karmada-aggregated-apiserver

然后,通过以下清单将 APIService 部署到 karmada-apiserver

展开查看 yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
name: v1alpha1.cluster.karmada.io
labels:
app: karmada-aggregated-apiserver
apiserver: "true"
spec:
insecureSkipTLSVerify: true
group: cluster.karmada.io
groupPriorityMinimum: 2000
service:
name: karmada-aggregated-apiserver
namespace: karmada-system
version: v1alpha1
versionPriority: 10
---
apiVersion: v1
kind: Service
metadata:
name: karmada-aggregated-apiserver
namespace: karmada-system
spec:
type: ExternalName
externalName: karmada-aggregated-apiserver.karmada-system.svc.cluster.local

步骤 5:检查集群状态

如果一切顺利,你就可以像升级前一样查看所有集群。

kubectl get clusters

karmada-agent 需要一个额外的 impersonate 动作

为了代理用户的请求,karmada-agent 现在会请求一个额外的 impersonate 动作。 请检查 ClusterRole 配置或应用以下清单。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: karmada-agent
rules:
- apiGroups: ['*']
resources: ['*']
verbs: ['*']
- nonResourceURLs: ['*']
verbs: ["get"]

MCS 特性现在支持 Kubernetes v1.21+

Kubernetes v1.21 已弃用 EndpointSlicesdiscovery.k8s.io/v1beta1,取而代之的是 discovery.k8s.io/v1,Karmada 在 v1.0.0 版本中适配了这项变更。 现在 MCS 特性需要成员集群版本不低于 v1.21。