Initial commit

main
ytj 2 months ago
commit f7720a9b65

7
.gitignore vendored

@ -0,0 +1,7 @@
# ---> Ada
# Object file
*.o
# Ada Library Information
*.ali

@ -0,0 +1,773 @@
<h1><center>KubeGems连接Kubernetes</center></h1>
------
**作者:行癫<盗版必究>**
## 一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 <none> 124d v1.25.1
node-2 Ready <none> 124d v1.25.1
node-3 Ready <none> 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 <none> 80:32317/TCP,9100:30420/TCP 173m
```
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/gems-first-dashbaord-bbc455105192bd6a238ac0b41ed07503.jpg" alt="img" style="zoom:50%;" />
## 三连接Kubernetes集群
#### 1.获取集群kubeconfig
获取current-contextclusters.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连接
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235104152.png" alt="image-20220828235104152" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235127957.png" alt="image-20220828235127957" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235208725.png" alt="image-20220828235208725" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235303696.png" alt="image-20220828235303696" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235332423.png" alt="image-20220828235332423" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235402611.png" alt="image-20220828235402611" style="zoom:50%;" />
#### 2.查看kubernetes节点
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235439473.png" alt="image-20220828235439473" style="zoom:50%;" />
#### 3.查看资源概览
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235613811.png" alt="image-20220828235613811" style="zoom:50%;" />
#### 4.组件管理
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220828235643825.png" alt="image-20220828235643825" style="zoom:50%;" />

@ -0,0 +1,27 @@
Academic Free License
Version 1.1
The Academic Free License applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
"Licensed under the Academic Free License version 1.1."
Grant of License. Licensor hereby grants to any person obtaining a copy of the Original Work ("You") a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license
(1) to use, copy, modify, merge, publish, perform, distribute and/or sell copies of the Original Work and derivative works thereof, and
(2) under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and derivative works thereof, subject to the following conditions.
Right of Attribution. Redistributions of the Original Work must reproduce all copyright notices in the Original Work as furnished by the Licensor, both in the Original Work itself and in any documentation and/or other materials provided with the distribution of the Original Work in executable form.
Exclusions from License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor.
WARRANTY AND DISCLAIMERS. LICENSOR WARRANTS THAT THE COPYRIGHT IN AND TO THE ORIGINAL WORK IS OWNED BY THE LICENSOR OR THAT THE ORIGINAL WORK IS DISTRIBUTED BY LICENSOR UNDER A VALID CURRENT LICENSE FROM THE COPYRIGHT OWNER. EXCEPT AS EXPRESSLY STATED IN THE IMMEDIATELY PRECEEDING SENTENCE, THE ORIGINAL WORK IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE WARRANTY OF NON-INFRINGEMENT AND WARRANTIES THAT THE ORIGINAL WORK IS MERCHANTABLE OR FIT FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO LICENSE TO ORIGINAL WORK IS GRANTED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE LICENSOR BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR THE USE OF THE ORIGINAL WORK INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PERSON SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
License to Source Code. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to access and modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work.
Mutual Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License if You file a lawsuit in any court alleging that any OSI Certified open source software that is licensed under any license containing this "Mutual Termination for Patent Action" clause infringes any patent claims that are essential to use that software.
This license is Copyright (C) 2002 Lawrence E. Rosen. All rights reserved.
Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner.

@ -0,0 +1,2 @@
# kubegems
Loading…
Cancel
Save