basic k8s client

This commit is contained in:
w-mj 2023-02-15 08:16:05 +08:00
parent 3fbff92ed8
commit 0fc2a423cb
No known key found for this signature in database
GPG Key ID: 3A2CB5BE2F835897
7 changed files with 86 additions and 35 deletions

3
.gitignore vendored
View File

@ -1 +1,2 @@
.idea
.idea
out

4
Dockerfile Normal file
View File

@ -0,0 +1,4 @@
FROM alpine:latest
COPY out/manager /manager
RUN chmod +x /manager
ENTRYPOINT /manager

7
Makefile Normal file
View File

@ -0,0 +1,7 @@
IMAGE_TAG ?= docker.educg.net/k8s/manager:dev
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o out/manager
docker: build
docker build --rm -t $(IMAGE_TAG) .

View File

@ -1 +1,20 @@
# Kubernetes 管理系统
# Kubernetes 管理系统
## 获得Token
```bash
kubectl create serviceaccount -n default dev
kubectl create clusterrolebinding dev -n default --clusterrole=cluster-admin --serviceaccount=default:dev
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: dev-secret
annotations:
kubernetes.io/service-account.name: dev
type: kubernetes.io/service-account-token
EOF
kubectl get secret dev-secret -o yaml
```

25
install.yaml Normal file
View File

@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-manager-deployment
labels:
app: k8s-manager
spec:
replicas: 1
selector:
matchLabels:
app: k8s-manager
template:
metadata:
labels:
app: k8s-manager
spec:
serviceAccountName: dev
containers:
- name: k8s-manager-pod
image: docker.educg.net/k8s/manager:dev
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service

View File

@ -14,6 +14,7 @@ import (
var f embed.FS
func main() {
go m.ListPods()
r := gin.Default()
r.SetFuncMap(template.FuncMap{

View File

@ -2,53 +2,47 @@ package k8s_manager
import (
"context"
"fmt"
log "github.com/sirupsen/logrus"
appv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"time"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"strings"
"sync"
"time"
)
var (
BearerToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IllVaFlLMVBVYmFBZXRydXdCUnM0M1RtNGhIOTZQTWRoY05wbUg5dldIdTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRldi10b2tlbi1yMmZkcSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkZXYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIyZDQ3ZDA5NS02ZmExLTQ2NmQtYjI5NS02MGU1YWRlZDQ1ODUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkZXYifQ.MxixZYYcsVqxjy30o9romQK0nt5qn-rcXnnbz383KDCdsiaDgSszQoARDiS3QdH7iAC5-g81s6QujJdJ882Bh03JTtPUtNVmphFWyJgOCgUUb3S_r9M_t0du8DzIkVPZ-IEM1PoOMuaOmB5zpZAgnihIlZ5souDefAKc0Vni5Yvpn8_joGKzcidG-1ObjRCaxEondcFpYPyB2Aigs2ITTqggdYIJNQaAWc7pkyHtSkJUH8s4w244_ksb-QG-ULI-rKNAdy4dvbecyP3wyRefICv3MWYnKFkXn3EAWvvyt33w-ur8VAoL78L0HlEXr-j0Qw9WOrjM8ObiJCIir2zGsA"
func ListPods() {
var err error
config, err := rest.InClusterConfig()
if err != nil {
log.WithError(err).Error("InClusterConfig")
return
}
CAPEMString = `-----BEGIN CERTIFICATE-----
MIIC5zCCAc+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwptaW5p
a3ViZUNBMB4XDTIwMDgxNDA5MDEzMFoXDTMwMDgxMzA5MDEzMFowFTETMBEGA1UE
AxMKbWluaWt1YmVDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxS
S5ascXta6AUnQ7ZROEKrqhaihSVbRuIOfW8H/DUjMigeeRaR6T4DYvypQS8E2LGk
tz7330dWW0i+mqhBSJiiOpUgTD4mgIsiFYqI5gqb0swHnkQvfV3c+J3YY/zRQkIo
D9qxs5xVdk0dX/A7sBPBNe4VUlSN3IwZSuLj0bke9/RiNYR3lhGMnpwFyTUnwTh8
qF6MkHGByezIQiDMB7KGFAjQ+FTE43oxQljxWPh+RggKr7JaSSzjYwcYWi8myou6
5GdqhiZWm1k5yuFlW0j8r/N322eZzzIPHm7IvLPQEmHHX8cwRU+vpDz1SRJCC+Jl
mSC5ZJNAHf4kBkGP0FECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMB0GA1UdJQQW
MBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
DQEBCwUAA4IBAQATtMQJm0dnp6fzsy1XjBk/cERcHLKX1U20lUDdrWpE2Yxi5/aX
4i3F5CyL4hipKRKIaNJB9+RcCC+YowCbU6OybMsZQTml2e95XBIm15gckGBOMyyL
RsTImQrIjOV9tXIl3HUmAX3BSAEEdofv/9qfD4MmSmL++H2HvEB7xHjFzCKWaY/v
oPOWixQPOpL2YvsbwWQXVZxlZOekvDrJEQpJICGXto2B+bQ42SEGiJc3bzOMYPkD
cMR4w7ycdyRnIsUjGxsGcconEY/qtcWa8hlgPFls460HFI7Rw9DH6/LWGtHeHbtj
EsvUv758JsqECbzdwaHKY4CCxjPDtN6DTOtU
-----END CERTIFICATE-----`
)
client, err := kubernetes.NewForConfig(config)
if err != nil {
log.WithError(err).Error("NewForConfig")
}
for {
pods, err := client.CoreV1().Pods("").List(context.Background(), metav1.ListOptions{})
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("There are %d pods in the cluster\n", len(pods.Items))
}
time.Sleep(10 * time.Second)
}
}
func main() {
func fake_main() {
wg := sync.WaitGroup{}
config, err := rest.InClusterConfig()
tlsClientConfig := rest.TLSClientConfig{
CAData: []byte(CAPEMString),
}
config := rest.Config{
Host: "minikube.local:8443",
BearerToken: BearerToken,
TLSClientConfig: tlsClientConfig,
Timeout: 20 * time.Second,
}
clientSet, err := kubernetes.NewForConfig(&config)
clientSet, err := kubernetes.NewForConfig(config)
if err != nil {
log.Println(err)
return