basic k8s client
This commit is contained in:
parent
3fbff92ed8
commit
0fc2a423cb
|
|
@ -1 +1,2 @@
|
|||
.idea
|
||||
out
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
FROM alpine:latest
|
||||
COPY out/manager /manager
|
||||
RUN chmod +x /manager
|
||||
ENTRYPOINT /manager
|
||||
|
|
@ -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) .
|
||||
19
README.md
19
README.md
|
|
@ -1 +1,20 @@
|
|||
# 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
|
||||
```
|
||||
|
|
@ -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
|
||||
1
main.go
1
main.go
|
|
@ -14,6 +14,7 @@ import (
|
|||
var f embed.FS
|
||||
|
||||
func main() {
|
||||
go m.ListPods()
|
||||
r := gin.Default()
|
||||
|
||||
r.SetFuncMap(template.FuncMap{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue