千锋教育-做有情怀、有良心、有品质的职业教育机构

领取全套视频

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术要点  >  正文
分享到:

如何用KubeGems管理kubernetes

时间:2023-04-07 11:42     来源: 作者:lxl

  一:Kubernetes集群部署

  1.kubernetes环境

   kubernetes高可用集群

   kubernetes非高可用集群

  2.kubernetes验证

  [root@master ~]# kubectl get node

  NAME STATUS ROLES AGE VERSION

  master Ready control-plane,master 124d v1.25.1

  node-1 Ready124d v1.25.1

  node-2 Ready124d v1.25.1

  node-3 Ready124d v1.25.1

  二:KubeGems部署

   KubeGems部署需要基于Kubernetes集群的环境,高可用集群和非高可用集群均可,在这里基于非高可用集群部署

   kubernetes 1.20 及以上版本( 1.23+最佳 )

  1.核心组件

用KubeGems管理kubernetes

  2.部署kubegems-installer

   installer 是用于安装 kubegems 主要组件和插件的控制器

  [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

   验证

  [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

  [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

  [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

  复制代码

   验证

  [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:

  [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插件

  [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 访问地址

  [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

  [root@master ~]# kubectl get svc -n kubegems | grep dashboard

  kubegems-dashboard NodePort 10.103.140.10180:32317/TCP,9100:30420/TCP 173m

gems-first-dashbaord-bbc455105192bd6a238ac0b41ed07503

  三:连接Kubernetes集群

  1.获取集群kubeconfig

   获取current-context(clusters.cluster.name)

  [root@master ~]# CURRENT_CONTEXT=`kubectl config current-context`

   获取current-cluster

  [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

  [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

  [root@master ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}'

   kubeconfig文件创建

  [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连接

用KubeGems管理kubernetes

用KubeGems管理kubernetes

用KubeGems管理kubernetes

用KubeGems管理kubernetes

用KubeGems管理kubernetes

用KubeGems管理kubernetes

  2.查看kubernetes节点

用KubeGems管理kubernetes

  3.查看资源概览

用KubeGems管理kubernetes

  4.组件管理

9

相关文章

上一篇:如何实现跨域访问
下一篇:
  • 北京总部地址:北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 深圳校区地址:深圳市宝安区宝安大道5010号西部硅谷B座C区1层108
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 广州校区地址:广州市白云区永平街永泰学山塘学山文化创意谷A1栋六楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 郑州二七区校区地址:郑州市二七区航海中路60号海为科技园C区10层
    郑州高新区校区地址:郑州市高新区金梭路与银杏路交叉口教育科技产业园南门D座4层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 武汉金融港校区地址:武汉市东新区光谷大道77号金融港B18栋三、四层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 成都校区地址:成都市高新区肖家河沿街138号肖家河大厦三楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 杭州旺田校区:浙江省杭州市上城区九堡镇旺田书画城A座4层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 青岛校区地址:青岛市市北区龙城路31号卓越世纪中心4号楼5层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 重庆校区地址:重庆市九龙坡区科园一路3号渝高大厦9楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 哈尔滨校区地址:哈尔滨市松北区世泽路689号 科技创新城4号楼405
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 南京校区地址:南京市建邺区应天大街780号弘辉产业园1栋2层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 太原校区地址:太原市小店区长治路230号能源互联网大厦6层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 沈阳校区地址:辽宁省沈阳市浑南区世纪路16号东大软件园B园B1座A201
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 合肥校区地址:合肥市包河区徽州大道396号东方广场B座12A
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 贵阳校区地址:贵阳市云岩区延安东路37号物资大厦老楼9楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、网络营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 济南校区地址:济南市历下区历山路36号齐鲁师范学院利宝产业大厦3F
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python人工智能+数据分析培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、网络安全培训、区块链培训、影视剪辑包装培训、游戏原画培训、全媒体运营培训
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱