wangpengfei
2023-06-05 9827f73e922a5eba800bf7782a73b8eacb749c24
src/k8s/create.go
@@ -129,15 +129,22 @@
      return err
   }
   nodePort1, nodePort2, err := getTwoNodePort(clientset)
   if err != nil {
      return err
   }
   port1 := fmt.Sprint(nodePort1)
   port2 := fmt.Sprint(nodePort2)
   // 创建 Deployment
   err = createDeployment(clientset, namespace, deploymentName)
   err = createDeployment(clientset, namespace, deploymentName, port1, port2)
   if err != nil {
      return err
   }
   log.Printf("Waiting for Deployment %s to be ready...\n", deploymentName)
   // 创建 Service
   err = createService(clientset, namespace, serviceName)
   err = createService(clientset, namespace, serviceName, nodePort1, nodePort2)
   if err != nil {
      return err
   }
@@ -168,7 +175,7 @@
   return nil
}
func createDeployment(clientset *kubernetes.Clientset, namespace, deploymentName string) error {
func createDeployment(clientset *kubernetes.Clientset, namespace, deploymentName, port1, port2 string) error {
   fmt.Println("\033[1;37;40mCreating Deployment:", deploymentName, "\033[0m")
   deployment := &appsv1.Deployment{
@@ -206,6 +213,14 @@
                     Name:  namespace,
                     Image: "192.168.20.119/apsserver/apsserver:v0.5",
                     Env: []apiv1.EnvVar{
                        {
                           Name:  "NODE_PORT1",
                           Value: port1,
                        },
                        {
                           Name:  "NODE_PORT2",
                           Value: port2,
                        },
                        {
                           Name:  "DB_HOST",
                           Value: "localhost",
@@ -249,13 +264,8 @@
}
// createService 创建指定的 Service
func createService(clientset *kubernetes.Clientset, namespace, serviceName string) error {
func createService(clientset *kubernetes.Clientset, namespace, serviceName string, port1, port2 int32) error {
   fmt.Println("\033[1;37;40mCreating Service:", serviceName, "\033[0m")
   //nodePort, err := getRandomNodePort(clientset)
   //if err != nil {
   //   return err
   //}
   service := &apiv1.Service{
      ObjectMeta: metav1.ObjectMeta{
@@ -272,14 +282,14 @@
               Protocol:   apiv1.ProtocolTCP,
               Port:       port,                      // 集群内部访问端口
               TargetPort: intstr.FromInt(int(port)), // 容器对外端口
               NodePort:   0,                         // 外部访问端口
               NodePort:   port1,                     // 外部访问端口
            },
            {
               Name:       "tcp",
               Protocol:   apiv1.ProtocolTCP,
               Port:       rpcPort,
               TargetPort: intstr.FromInt(int(rpcPort)),
               NodePort:   0,
               NodePort:   port2,
            },
         },
      },
@@ -299,6 +309,27 @@
   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
func getRandomNodePort(clientset *kubernetes.Clientset) (int32, error) {
   // 获取一个随机的 NodePort