From 77365bf2308a64c6800881ad5b3471d79b7112b8 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期二, 20 六月 2023 18:06:40 +0800
Subject: [PATCH] fix
---
src/k8s/create.go | 137 ++++++++++++++++++++++++++++++++-------------
1 files changed, 97 insertions(+), 40 deletions(-)
diff --git a/src/k8s/create.go b/src/k8s/create.go
index 84db8a8..89f9b0c 100644
--- a/src/k8s/create.go
+++ b/src/k8s/create.go
@@ -27,6 +27,19 @@
usedNodePorts = make(map[int32]bool)
)
+type Config struct {
+ Client *kubernetes.Clientset // Kubernetes 瀹㈡埛绔�
+ Image string // 闀滃儚鍚嶇О
+ DBHost string // 鏁版嵁搴撳湴鍧�
+ HttpPort int32 // HTTP 绔彛
+ RpcPort int32 // RPC 绔彛
+ NameSpace string // Namespace
+ DeploymentName string // Deployment 鍚嶇О
+ ServiceName string // Service 鍚嶇О
+ ALHost string // 绠楁硶Host
+ Host string // 鏈嶅姟Host
+}
+
func create_test() {
// 閰嶇疆 Kubernetes 闆嗙兢鐨� kubeconfig 璺緞
kubeconfig := flag.String("kubeconfig", filepath.Join(util.HomeDir(), ".kube", "config"), "kubeconfig file")
@@ -45,7 +58,7 @@
// 鍒涘缓澶氫釜 Namespace 涓嬬殑鐩稿悓鍚嶇О鐨� Deployment 鍜� Service
for _, ns := range namespaces {
- err = CreateDeploymentAndService(clientset, ns, ns, ns)
+ err = CreateDeploymentAndService(Config{Client: clientset, NameSpace: ns, DeploymentName: ns, ServiceName: ns})
if err != nil {
panic(err)
}
@@ -114,30 +127,35 @@
return nil
}
-func CreateDeploymentAndService(clientset *kubernetes.Clientset, namespace, deploymentName, serviceName string) error {
- fmt.Println("\033[1;37;40mCreating resources in Namespace:", namespace, "\033[0m")
+func CreateDeploymentAndService(config Config) error {
+ fmt.Println("\033[1;37;40mCreating resources in Namespace:", config.NameSpace, "\033[0m")
// 妫�娴嬪苟鍒犻櫎宸插瓨鍦ㄧ殑 Deployment 鍜� Service
- err := CheckAndDeleteResources(clientset, namespace, deploymentName, serviceName)
+ err := CheckAndDeleteResources(config.Client, config.NameSpace, config.DeploymentName, config.ServiceName)
if err != nil {
return err
}
// 鍒涘缓 Namespace
- err = createNamespace(clientset, namespace)
+ err = createNamespace(config.Client, config.NameSpace)
+ if err != nil {
+ return err
+ }
+
+ config.HttpPort, config.RpcPort, err = getTwoNodePort(config.Client)
if err != nil {
return err
}
// 鍒涘缓 Deployment
- err = createDeployment(clientset, namespace, deploymentName)
+ err = createDeployment(config)
if err != nil {
return err
}
- log.Printf("Waiting for Deployment %s to be ready...\n", deploymentName)
+ log.Printf("Waiting for Deployment %s to be ready...\n", config.DeploymentName)
// 鍒涘缓 Service
- err = createService(clientset, namespace, serviceName)
+ err = createService(config)
if err != nil {
return err
}
@@ -168,24 +186,24 @@
return nil
}
-func createDeployment(clientset *kubernetes.Clientset, namespace, deploymentName string) error {
- fmt.Println("\033[1;37;40mCreating Deployment:", deploymentName, "\033[0m")
+func createDeployment(config Config) error {
+ fmt.Println("\033[1;37;40mCreating Deployment:", config.DeploymentName, "\033[0m")
deployment := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
- Name: deploymentName,
+ Name: config.DeploymentName,
},
Spec: appsv1.DeploymentSpec{
Replicas: &replicas,
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
- "cid": namespace,
+ "cid": config.NameSpace,
},
},
Template: apiv1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
- "cid": namespace,
+ "cid": config.NameSpace,
},
},
Spec: apiv1.PodSpec{
@@ -196,35 +214,57 @@
WhenUnsatisfiable: apiv1.DoNotSchedule,
LabelSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{
- "cid": namespace,
+ "cid": config.NameSpace,
},
},
},
},
Containers: []apiv1.Container{
{
- Name: namespace,
- Image: "192.168.20.119/apsserver/apsserver:v0.5",
+ Name: config.NameSpace,
+ Image: config.Image,
Env: []apiv1.EnvVar{
{
- Name: "DB_HOST",
- Value: "localhost",
+ Name: "GRPC_PORT",
+ Value: fmt.Sprint(config.RpcPort),
+ },
+ {
+ Name: "DB_HOST",
+ ValueFrom: &apiv1.EnvVarSource{
+ FieldRef: &apiv1.ObjectFieldSelector{
+ APIVersion: "v1",
+ FieldPath: "status.hostIP",
+ },
+ },
+ },
+ {
+ Name: "HOST",
+ ValueFrom: &apiv1.EnvVarSource{
+ FieldRef: &apiv1.ObjectFieldSelector{
+ APIVersion: "v1",
+ FieldPath: "status.hostIP",
+ },
+ },
+ },
+ {
+ Name: "AL_HOST",
+ Value: config.ALHost,
},
{
Name: "DB_NAME",
- Value: namespace,
+ Value: config.NameSpace,
},
{
Name: "DB_PORT",
- Value: strconv.Itoa(3306),
+ Value: strconv.Itoa(6446),
},
{
Name: "DB_USER",
- Value: namespace,
+ Value: config.NameSpace,
},
{
Name: "DB_PASSWD",
- Value: namespace + "@Basic2023",
+ Value: config.NameSpace + "@Basic2023",
},
},
ImagePullPolicy: apiv1.PullAlways, // 璁剧疆闀滃儚鎷夊彇绛栫暐涓� Always
@@ -235,35 +275,30 @@
},
}
- _, err := clientset.AppsV1().Deployments(namespace).Create(context.TODO(), deployment, metav1.CreateOptions{})
+ _, err := config.Client.AppsV1().Deployments(config.DeploymentName).Create(context.TODO(), deployment, metav1.CreateOptions{})
if err != nil {
if !errors.IsAlreadyExists(err) {
return fmt.Errorf("failed to create Deployment: %v", err)
}
- fmt.Printf("Deployment %s already exists in Namespace %s\n", deploymentName, namespace)
+ fmt.Printf("Deployment %s already exists in Namespace %s\n", config.DeploymentName, config.NameSpace)
} else {
- fmt.Printf("Deployment %s created in Namespace %s\n", deploymentName, namespace)
+ fmt.Printf("Deployment %s created in Namespace %s\n", config.DeploymentName, config.NameSpace)
}
return nil
}
// createService 鍒涘缓鎸囧畾鐨� Service
-func createService(clientset *kubernetes.Clientset, namespace, serviceName string) error {
- fmt.Println("\033[1;37;40mCreating Service:", serviceName, "\033[0m")
-
- //nodePort, err := getRandomNodePort(clientset)
- //if err != nil {
- // return err
- //}
+func createService(config Config) error {
+ fmt.Println("\033[1;37;40mCreating Service:", config.ServiceName, "\033[0m")
service := &apiv1.Service{
ObjectMeta: metav1.ObjectMeta{
- Name: serviceName,
+ Name: config.ServiceName,
},
Spec: apiv1.ServiceSpec{
Selector: map[string]string{
- "cid": namespace,
+ "cid": config.NameSpace,
},
Type: apiv1.ServiceTypeNodePort,
Ports: []apiv1.ServicePort{
@@ -272,31 +307,53 @@
Protocol: apiv1.ProtocolTCP,
Port: port, // 闆嗙兢鍐呴儴璁块棶绔彛
TargetPort: intstr.FromInt(int(port)), // 瀹瑰櫒瀵瑰绔彛
- NodePort: 0, // 澶栭儴璁块棶绔彛
+ NodePort: config.HttpPort, // 澶栭儴璁块棶绔彛
},
{
Name: "tcp",
Protocol: apiv1.ProtocolTCP,
Port: rpcPort,
TargetPort: intstr.FromInt(int(rpcPort)),
- NodePort: 0,
+ NodePort: config.RpcPort,
},
},
+ SessionAffinity: apiv1.ServiceAffinityClientIP,
},
}
- _, err := clientset.CoreV1().Services(namespace).Create(context.TODO(), service, metav1.CreateOptions{})
+ _, err := config.Client.CoreV1().Services(config.ServiceName).Create(context.TODO(), service, metav1.CreateOptions{})
if err != nil {
if !errors.IsAlreadyExists(err) {
return fmt.Errorf("failed to create Service: %v", err)
}
- log.Printf("Service %s already exists in Namespace %s\n", serviceName, namespace)
+ log.Printf("Service %s already exists in Namespace %s\n", config.ServiceName, config.NameSpace)
} else {
- log.Printf("Service %s created in Namespace %s\n", serviceName, namespace)
+ log.Printf("Service %s created in Namespace %s\n", config.ServiceName, config.NameSpace)
}
return nil
+}
+
+func getTwoNodePort(client *kubernetes.Clientset) (nodePort1, nodePort2 int32, err error) {
+ nodePort1, err = getRandomNodePort(client)
+ if err != nil {
+ return 0, 0, err
+ }
+
+ for {
+ nodePort2, err = getRandomNodePort(client)
+ if err != nil {
+ return 0, 0, err
+ }
+
+ if nodePort2 != nodePort1 {
+ break
+ }
+
+ }
+
+ return nodePort1, nodePort2, nil
}
// getRandomNodePort 鑾峰彇涓�涓湭浣跨敤鐨勯殢鏈� NodePort
@@ -366,7 +423,7 @@
if len(svc.Spec.Ports) > 0 {
for _, p := range svc.Spec.Ports {
// return tcp port
- if p.Name == "tcp" {
+ if p.Name == "http" {
return p.NodePort, nil
}
}
--
Gitblit v1.8.0