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