From b81e8f06fd2fcbf6aa3102707506f0389a1355e7 Mon Sep 17 00:00:00 2001 From: diandian Date: Tue, 28 Mar 2023 20:50:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'KubeGems'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KubeGems/KubeGems连接Kubernetes.md | 773 +++++++++++++++++++++++++++ 1 file changed, 773 insertions(+) create mode 100644 KubeGems/KubeGems连接Kubernetes.md diff --git a/KubeGems/KubeGems连接Kubernetes.md b/KubeGems/KubeGems连接Kubernetes.md new file mode 100644 index 0000000..dac3032 --- /dev/null +++ b/KubeGems/KubeGems连接Kubernetes.md @@ -0,0 +1,773 @@ +

KubeGems连接Kubernetes

+ +------ + +**作者:行癫<盗版必究>** + +## 一:Kubernetes集群部署 + +#### 1.kubernetes环境 + +​ kubernetes高可用集群 + +​ kubernetes非高可用集群 + +#### 2.kubernetes验证 + +```shell +[root@master ~]# kubectl get node +NAME STATUS ROLES AGE VERSION +master Ready control-plane,master 124d v1.25.1 +node-1 Ready 124d v1.25.1 +node-2 Ready 124d v1.25.1 +node-3 Ready 124d v1.25.1 +``` + +## 二:KubeGems部署 + +​ KubeGems部署需要基于Kubernetes集群的环境,高可用集群和非高可用集群均可,在这里基于非高可用集群部署 + +​ kubernetes 1.20 及以上版本( 1.23+最佳 ) + +#### 1.核心组件 + +| 名称 | 描述 | +| :------------------: | :---------------------------------------------------------: | +| `kubegems-installer` | kubegems 安装程序,安装 kubegems 组件及依赖组件 | +| `kubegems` | kubegems 核心组件,包含 UI 界面及相关 API 服务 | +| `kubegems-local` | kubegems 边缘组件,安装在托管集群上,获取集群信息和执行操作 | + +#### 2.部署kubegems-installer + +​ installer 是用于安装 kubegems 主要组件和插件的控制器 + +```shell +[root@master ~]# kubectl create namespace kubegems-installer +[root@master ~]# kubectl apply -f https://github.com/kubegems/kubegems/raw/main/deploy/installer.yaml +[root@master ~]# vi installer.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.9.0 + meta.helm.sh/release-name: kubegems-installer + meta.helm.sh/release-namespace: kubegems-installer + creationTimestamp: null + name: plugins.plugins.kubegems.io +spec: + group: plugins.kubegems.io + names: + kind: Plugin + listKind: PluginList + plural: plugins + singular: plugin + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Kind of the bundle + jsonPath: .spec.kind + name: Kind + type: string + - description: Status of the bundle + jsonPath: .status.phase + name: Status + type: string + - description: Install Namespace of the bundle + jsonPath: .status.namespace + name: Namespace + type: string + - description: Version of the bundle + jsonPath: .status.version + name: Version + type: string + - description: app version of the bundle + jsonPath: .status.appVersion + name: AppVersion + type: string + - description: UpgradeTimestamp of the bundle + jsonPath: .status.upgradeTimestamp + name: UpgradeTimestamp + type: date + - description: CreationTimestamp of the bundle + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + chart: + description: Chart is the name of the chart to install. + type: string + dependencies: + description: Dependencies is a list of bundles that this bundle depends + on. The bundle will be installed after all dependencies are exists. + items: + description: 'ObjectReference contains enough information to let + you inspect or modify the referred object. --- New uses of this + type are discouraged because of difficulty describing its usage + when embedded in APIs. 1. Ignored fields. It includes many fields + which are not generally honored. For instance, ResourceVersion + and FieldPath are both very rarely valid in actual usage. 2. Invalid + usage help. It is impossible to add specific help for individual + usage. In most embedded usages, there are particular restrictions + like, "must refer only to types A and B" or "UID not honored" + or "name must be restricted". Those cannot be well described when + embedded. 3. Inconsistent validation. Because the usages are + different, the validation rules are different by usage, which + makes it hard for users to predict what will happen. 4. The fields + are both imprecise and overly precise. Kind is not a precise + mapping to a URL. This can produce ambiguity during interpretation + and require a REST mapping. In most cases, the dependency is + on the group,resource tuple and the version of the actual struct + is irrelevant. 5. We cannot easily change it. Because this type + is embedded in many locations, updates to this type will affect + numerous schemas. Don''t make new APIs embed an underspecified + API type they do not control. Instead of using this type, create + a locally provided and used type that is well-focused on your + reference. For example, ServiceReferences for admission registration: + https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + .' + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: array + disabled: + description: Disabled indicates that the bundle should not be installed. + type: boolean + installNamespace: + description: InstallNamespace is the namespace to install the bundle + into. If not specified, the bundle will be installed into the namespace + of the bundle. + type: string + kind: + description: Kind bundle kind. + enum: + - helm + - kustomize + - template + type: string + path: + description: Path is the path in a tarball to the chart/kustomize. + type: string + url: + description: URL is the URL of helm repository, git clone url, tarball + url, s3 url, etc. + type: string + values: + description: Values is a nested map of helm values. + type: object + x-kubernetes-preserve-unknown-fields: true + valuesFrom: + description: ValuesFiles is a list of references to helm values files. + Ref can be a configmap or secret. + items: + properties: + kind: + description: Kind is the type of resource being referenced + enum: + - ConfigMap + - Secret + type: string + name: + description: Name is the name of resource being referenced + type: string + optional: + description: Optional set to true to ignore referense not found + error + type: boolean + prefix: + description: An optional identifier to prepend to each key in + the ConfigMap. Must be a C_IDENTIFIER. + type: string + required: + - kind + - name + type: object + type: array + version: + description: Version is the version of helm chart, git revision, etc. + type: string + type: object + status: + properties: + appVersion: + description: AppVersion is the app version of the bundle. + type: string + creationTimestamp: + description: CreationTimestamp is the first creation timestamp of + the bundle. + format: date-time + type: string + message: + description: Message is the message associated with the status In + helm, it's the notes contens. + type: string + namespace: + description: Namespace is the namespace where the bundle is installed. + type: string + phase: + description: Phase is the current state of the release + type: string + resources: + description: Resources is a list of resources created/managed by the + bundle. + items: + description: 'ObjectReference contains enough information to let + you inspect or modify the referred object. --- New uses of this + type are discouraged because of difficulty describing its usage + when embedded in APIs. 1. Ignored fields. It includes many fields + which are not generally honored. For instance, ResourceVersion + and FieldPath are both very rarely valid in actual usage. 2. Invalid + usage help. It is impossible to add specific help for individual + usage. In most embedded usages, there are particular restrictions + like, "must refer only to types A and B" or "UID not honored" + or "name must be restricted". Those cannot be well described when + embedded. 3. Inconsistent validation. Because the usages are + different, the validation rules are different by usage, which + makes it hard for users to predict what will happen. 4. The fields + are both imprecise and overly precise. Kind is not a precise + mapping to a URL. This can produce ambiguity during interpretation + and require a REST mapping. In most cases, the dependency is + on the group,resource tuple and the version of the actual struct + is irrelevant. 5. We cannot easily change it. Because this type + is embedded in many locations, updates to this type will affect + numerous schemas. Don''t make new APIs embed an underspecified + API type they do not control. Instead of using this type, create + a locally provided and used type that is well-focused on your + reference. For example, ServiceReferences for admission registration: + https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + .' + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: array + upgradeTimestamp: + description: UpgradeTimestamp is the time when the bundle was last + upgraded. + format: date-time + type: string + values: + description: Values is a nested map of final helm values. + type: object + x-kubernetes-preserve-unknown-fields: true + version: + description: Version is the version of the bundle. In helm, Version + is the version of the chart. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + annotations: + meta.helm.sh/release-name: kubegems-installer + meta.helm.sh/release-namespace: kubegems-installer + labels: + app.kubernetes.io/component: installer + app.kubernetes.io/instance: kubegems-installer + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubegems-installer + helm.sh/chart: kubegems-installer-1.21.0 + name: kubegems-installer + namespace: kubegems-installer +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + meta.helm.sh/release-name: kubegems-installer + meta.helm.sh/release-namespace: kubegems-installer + labels: + app.kubernetes.io/component: installer + app.kubernetes.io/instance: kubegems-installer + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubegems-installer + helm.sh/chart: kubegems-installer-1.21.0 + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" + name: kubegems-installer-view +rules: +- apiGroups: + - plugins.kubegems.io + resources: + - plugins + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + meta.helm.sh/release-name: kubegems-installer + meta.helm.sh/release-namespace: kubegems-installer + labels: + app.kubernetes.io/component: installer + app.kubernetes.io/instance: kubegems-installer + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubegems-installer + helm.sh/chart: kubegems-installer-1.21.0 + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + name: kubegems-installer-edit +rules: +- apiGroups: + - plugins.kubegems.io + resources: + - plugins + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + annotations: + meta.helm.sh/release-name: kubegems-installer + meta.helm.sh/release-namespace: kubegems-installer + labels: + app.kubernetes.io/component: installer + app.kubernetes.io/instance: kubegems-installer + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubegems-installer + helm.sh/chart: kubegems-installer-1.21.0 + name: kubegems-installer + namespace: kubegems-installer +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: kubegems-installer + namespace: kubegems-installer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + meta.helm.sh/release-name: kubegems-installer + meta.helm.sh/release-namespace: kubegems-installer + labels: + app.kubernetes.io/component: installer + app.kubernetes.io/instance: kubegems-installer + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubegems-installer + helm.sh/chart: kubegems-installer-1.21.0 + name: kubegems-installer + namespace: kubegems-installer +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: installer + app.kubernetes.io/instance: kubegems-installer + app.kubernetes.io/name: kubegems-installer + strategy: + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/component: installer + app.kubernetes.io/instance: kubegems-installer + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubegems-installer + helm.sh/chart: kubegems-installer-1.21.0 + spec: + containers: + - args: + - installer + - --enableleaderelection + - --probeaddr=:8080 + - --metricsaddr=:9100 + env: + - name: LOG_LEVEL + value: debug + image: docker.io/kubegems/kubegems:latest + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 6 + httpGet: + path: /healthz + port: probe + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: installer + ports: + - containerPort: 8080 + name: probe + protocol: TCP + - containerPort: 9100 + name: metrics + protocol: TCP + readinessProbe: + failureThreshold: 6 + httpGet: + path: /healthz + port: probe + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + limits: {} + requests: {} + serviceAccountName: kubegems-installer +``` + +​ 验证 + +```shell +[root@master ~]# kubectl -n kubegems-installer get po +NAME READY STATUS RESTARTS AGE +kubegems-installer-757d4c64db-cf2x2 1/1 Running 0 20m +``` + +#### 2.安装local-path-provisioner + +​ kubegems 需要持久化一些重要数据,安装local-path-provisioner + +```shell +[root@master ~]# kubectl create namespace local-path-storage +[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/kubegems/kubegems/main/deploy/addon-local-path-provisioner.yaml +[root@master kubegems]# vi addon-local-path-provisioner.yaml +# https://github.com/rancher/local-path-provisioner/tree/master/deploy/chart +apiVersion: plugins.kubegems.io/v1beta1 +kind: Plugin +metadata: + name: local-path-provisioner + namespace: local-path-storage +spec: + kind: helm + url: https://github.com/rancher/local-path-provisioner/archive/refs/tags/v0.0.22.tar.gz + path: local-path-provisioner-0.0.22/deploy/chart/local-path-provisioner + version: 0.0.22 + values: + storageClass: + defaultClass: true + provisionerName: rancher.io/local-path + nodePathMap: + - node: DEFAULT_PATH_FOR_NON_LISTED_NODES + paths: + - /data +``` + +#### 3.部署 kubegems + +```shell +[root@master ~]# kubectl create namespace kubegems +[root@master ~]# export STORAGE_CLASS=local-path # 改为您使用的 storageClass +[root@master ~]# export KUBEGEMS_VERSION=v1.21.1 # change to specify kubegems version +[root@master ~]# wget https://raw.githubusercontent.com/kubegems/kubegems/main/deploy/kubegems-mirror.yaml +apiVersion: plugins.kubegems.io/v1beta1 +kind: Plugin +metadata: + name: kubegems + namespace: kubegems +spec: + kind: helm + url: https://charts.kubegems.io/kubegems + values: + global: + imageRegistry: registry.cn-beijing.aliyuncs.com + kubegemsVersion: latest + storageClass: local-path # change me to use a production storage class + mysql: + image: + repository: kubegems/mysql + persistence: + enabled: true + size: 20Gi + redis: + image: + repository: kubegems/redis + master: + persistence: + enabled: true + size: 5Gi + volumePermissions: + enabled: true + image: + repository: kubegems/bitnami-shell + argo-cd: + image: + repository: kubegems/argo-cd + redis: + image: + repository: kubegems/redis + gitea: + image: + repository: kubegems/gitea + persistence: + enabled: true + size: 10Gi + chartmuseum: + image: + repository: kubegems/chartmuseum + persistence: + enabled: true + size: 5Gi + ingress: + hostname: dashboard.kubegems.io +[root@master ~]# sed -i -e "s/local-path/${STORAGE_CLASS}/g" -e "s/latest/${KUBEGEMS_VERSION}/g" kubegems-mirror.yaml +[root@master ~]# kubectl create -f kubegems-mirror.yaml +``` + +​ 验证 + +```shell +[root@master ~]# kubectl -n kubegems get pod +NAME READY STATUS RESTARTS AGE +kubegems-api-7856cddc86-zxf2m 1/1 Running 6 (148m ago) 152m +kubegems-argo-cd-app-controller-57c756777c-qgtkb 1/1 Running 0 152m +kubegems-argo-cd-repo-server-84bc9df4cd-cvhmk 1/1 Running 0 152m +kubegems-argo-cd-server-58d6ccc99-mqb4k 1/1 Running 0 152m +kubegems-chartmuseum-74d498759c-rl49v 1/1 Running 0 152m +kubegems-charts-init-v1.21.1-2tn8s 0/1 Completed 0 152m +kubegems-dashboard-777875598f-7pfvx 1/1 Running 0 152m +kubegems-gitea-0 1/1 Running 0 152m +kubegems-init-v1.21.1-gpvrw 0/1 Completed 5 152m +kubegems-msgbus-7c6c4c66c-kq8xw 1/1 Running 6 (148m ago) 152m +kubegems-mysql-0 1/1 Running 0 152m +kubegems-redis-master-0 1/1 Running 0 136m +kubegems-worker-85c8d75ff7-2b7rr 1/1 Running 6 (148m ago) 152m +``` + +#### 4.访问kubegems仪表板 + +​ 你需要编辑kubegems插件,为dashbnoard组件开启nodeport: + +```shell +[root@master ~]# kubectl -n kubegems edit plugins.plugins.kubegems.io kubegems +只添加nodeport +apiVersion: plugins.kubegems.io/v1beta1 +kind: Plugin +metadata: +spec: + kind: helm + url: https://charts.kubegems.io/kubegems + values: + dashboard: + service: + type: NodePort + global: + kubegemsVersion: v1.21.1 + storageClass: local-path + ingress: + hostname: dashboard.kubegems.io +``` + +​ 使用 ingress 或其他方式访问 + +注意: + +​ kubegems 默认创建了 hostname 为 `dashboard.kubegems.io` 的 ingress, 同时默认绑定了 `default-gateway`的`ingressClass`。 如果您想更改为其他域名,或者绑定到其他网关可以编辑kubegems插件 + +​ `default-gateway`是平台默认网关,要使用它,你需要启用`网关-gateway`插件 + +```shell +[root@master ~]# kubectl -n kubegems edit plugins.plugins.kubegems.io kubegems +apiVersion: plugins.kubegems.io/v1beta1 +kind: Plugin +metadata: +spec: + kind: helm + url: https://charts.kubegems.io/kubegems + values: + global: + kubegemsVersion: v1.21.1 + storageClass: local-path + ingress: + hostname: dashboard.kubegems.io + ingressClassName: default-gateway +``` + +​ 获取 ingress 访问地址 + +```shell +[root@master ~]# PORT=$(kubectl -n kubegems-gateway get svc default-gateway -ojsonpath='{.spec.ports[0].nodePort}') +[root@master ~]# ADDRESS=$(kubectl -n kubegems get ingress kubegems -ojsonpath='{.spec.rules[*].host}') +[root@master ~]# echo http://$ADDRESS:$PORT +``` + +#### 5.浏览器访问 + +​ 用户:admin + +​ 密码:demo!@#admin + +```shell +[root@master ~]# kubectl get svc -n kubegems | grep dashboard +kubegems-dashboard NodePort 10.103.140.101 80:32317/TCP,9100:30420/TCP 173m +``` + +img + +## 三:连接Kubernetes集群 + +#### 1.获取集群kubeconfig + +​ 获取current-context(clusters.cluster.name) + +```shell +[root@master ~]# CURRENT_CONTEXT=`kubectl config current-context` +``` + +​ 获取current-cluster + +```shell +[root@master ~]# CURRENT_CLUSTER=`kubectl config view --raw -o=go-template='{{range .contexts}}{{if eq .name "'''${CURRENT_CONTEXT}'''"}}{{ index .context "cluster" }}{{end}}{{end}}'` +``` + +​ 获取certificate-authority-data + +```shell +[root@master ~]# certificate-authority-data=`kubectl config view --raw -o=go-template='{{range .clusters}}{{if eq .name "'''${CURRENT_CLUSTER}'''"}}"{{with index .cluster "certificate-authority-data" }}{{.}}{{end}}"{{ end }}{{ end }}')` +``` + +​ 用户:dashboard-admin;获取token + +```shell +[root@master ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}' +``` + +​ kubeconfig文件创建 + +```shell +[root@master ~]# cat kubeconfig +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EUXlOakUwTXpjME1Wb1hEVE15TURReU16RTBNemMwTVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUdZCkVpaTM5Y1ZFWjZvK3FvZmNnb2ErL0phb0M3NkkwbnJOS2gwR3NMZjRqVExxdm0vREl2QXNaOHlFQ2RUK0E0bVIKbnArZ0Fmbit2UkdiUXpRdVdKT21jUXF3cWowK0p1WUN2Z0hoSjZrQ2s0YUZCaTd2bWErbnFBOFZ6ZkhYeldMWApqcGhOMVluS2c2UThDdGdPVzh6cGxzSEg4VU0xaHRqTmVuYkM0WkRtMm5BRHBqT3plRVlzQldGY0lHTGV5THZBCjBXb3Z3Z0ZJYldONjhQaW02V3pDYVpCOTljN0VMVGl5aDJsOUVZYzArdlR4K24rcTdpd0c3U1BLSmIwTzVWa3gKeUNqK2s2eDVjRklkLzl1dmZJNGs3bk5aS1pQeU1oY2JhdEpBb3J5Y0xHYVQybTA3TW9LTTkzZmZkbWd1VW0xRwo5bWZBSHNYLzV3TEF6T3hzMmU4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZJUFJsR1NOb3kxUzhubmpmVVV5QzJjK0JMQVRNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRjA1NTg5Mk8wa0J0dnhvKzlSUwppZ1BNNVRUWEg4VHo0eHh2SlFwbytVY09ZSVZvc2xScGE3ZWlxWi9qd3V5bW9TaDRVeGxBVVBMVFlpa0VxQ01hClF0MHpBTmY5NUJ6eDJhbFhkSFViMVRLN1JkZXE4NjFMSCs4UUxnVlFzSEpCWHRja3FxcFgrWEhaWkU4SkQwYmQKZmhXd3JHSitJTTRVbW1sQ1ZaaGhTNDMyUUtTNFkyNzFuTGtUeXdTQ29HMnpKUGtRUVo4eVJsNG1HWk01VGM3Rwp1bmEySGtJVmhFWk85czNYYW5FSnZjZFQ4ajgyQVpYN2NlZWowdTRHN3pIVjhhUitwUGtFMW0wTXJmQUF4UE9PCjg0Y0hqdW1uRVNIL1NBWVE0NWtsRnlJM0RObDM4RHBGRE12eGgvMXpOQkE5d3cxdEJFQlc4ZnowSzZpVTBhZncKRURzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://10.0.0.220:6443 + name: kubernetes-admin@kubernetes +contexts: +- context: + cluster: kubernetes-admin@kubernetes + user: dashboard-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: +- name: dashboard-admin + user: + token: eyJhbGciOiJSUzI1NiIsImtpZCI6InFsRE1GQi1KQnZsZHpUOGZ4WGc1dlU1UHg3UGVrcC02TUNyYmZWcHhFZ3MifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4teGxoenIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYTM4ZThjZTMtODQ4ZS00ZDk0LWFiY2YtNGQ4MjRkZWViNjk3Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.anEX2MBlIo0lKQCGOsl3oZKBQkYujg6twLoO8hbWLAVp3xveAgpt6nW-_FrkG0yy9tIyXa6lpvu-c99ueB4KvKrIF0vJggWT3fU73u75iIwTbqDSghWy_BRFjt9NYuUFL4Mu-sPqra0ELgxYIGSEVuQwmZ8qOFjrQQQ2pKjxt8SsUHGLW-9FgmSgZTHPvZKFnU2V23BC2n_vowff63PF6kfnj1bNzV3Z1YCzgZOdy3jKM6sNKSI3dbcHiJpv5p7XF18qvuSZMJ9tMU4vSwzkQ_OLxsdNYwwD_YfRhua6f0kgWO23Z0lBTRLInejssdIQ31yewg9Eoqv4DhN1jZqhOw +``` + +2.KubeGems连接 + +image-20220828235104152 + +image-20220828235127957 + +image-20220828235208725 + +image-20220828235303696 + +image-20220828235332423 + +image-20220828235402611 + +#### 2.查看kubernetes节点 + +image-20220828235439473 + +#### 3.查看资源概览 + +image-20220828235613811 + +#### 4.组件管理 + +image-20220828235643825 \ No newline at end of file