范姐

0 声望

您还未设置简介,点击设置!15

您还未设置简介,点击设置!15

个人动态
  • 赞了 范姐Bootstrap5 教程 的评论!

    本网为了追赶潮流,80%的页面已经升级为bootstrap5了,版本为beta3
    还有部分功能受到影响,也在修复ing。

    3年前
  • 半兽人 回复 范姐Pod卡在了Terminating终止状态,该怎么解决? 中 :

    可以使用以下命令强制删除POD。

    kubectl delete pod --grace-period=0 --force --namespace
    

    相关问题可查看:https://www.orchome.com/10587

    3年前
  • 半兽人 回复 范姐创建k8s资源,并等待完成后在执行下一步 中 :

    下面是一个如何创建部署并检查它是否有至少一个准备好的副本的例子。也许检查状态中的条件会更好,并查找类型为Available和status为True的条件。

    package main
    
    import (
        "context"
        "fmt"
        v1 "k8s.io/api/apps/v1"
        podv1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/fields"
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/cache"
        "sigs.k8s.io/controller-runtime/pkg/client"
        "sigs.k8s.io/controller-runtime/pkg/client/config"
        "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
        "time"
    )
    
    const (
        namespace      = "default"
        deploymentName = "nginx"
    )
    
    func main() {
        cfg, err := config.GetConfig()
        if err != nil {
            panic(err)
        }
    
        clientset, err := kubernetes.NewForConfig(cfg)
        if err != nil {
            panic(err)
        }
    
        client, err := client.New(cfg, client.Options{})
        if err != nil {
            panic(err)
        }
    
        d := &v1.Deployment{
            ObjectMeta: metav1.ObjectMeta{
                Name:      deploymentName,
                Namespace: namespace,
            },
            Spec: v1.DeploymentSpec{
                Replicas: toInt32Ptr(2),
                Selector: &metav1.LabelSelector{
                    MatchLabels: map[string]string{
                        "app": "nginx",
                    },
                },
                Template: podv1.PodTemplateSpec{
                    ObjectMeta: metav1.ObjectMeta{
                        Labels: map[string]string{
                            "app": "nginx",
                        },
                    },
                    Spec: podv1.PodSpec{
                        Containers: []podv1.Container{
                            {
                                Name:  "nginx",
                                Image: "nginx",
                            },
                        },
                    },
                },
            },
        }
    
        fmt.Println("Deploying")
        _, err = controllerutil.CreateOrUpdate(context.TODO(), client, d, func() error {
            return nil
        })
    
        if err != nil {
            panic(err)
        }
    
        stop := make(chan struct{})
    
        watchList := cache.NewListWatchFromClient(clientset.AppsV1().RESTClient(), "deployments", namespace, fields.Everything())
        _, ctrl := cache.NewInformer(watchList, &v1.Deployment{}, time.Second, cache.ResourceEventHandlerFuncs{
            UpdateFunc: func(o, n interface{}) {
                newDeployment := n.(*v1.Deployment)
                if newDeployment.Name != deploymentName {
                    return
                }
    
                if newDeployment.Status.ReadyReplicas > 0 {
                    close(stop)
                    return
                }
    
                return
            },
        })
    
        ctrl.Run(stop)
        fmt.Println("Deployment has at least 1 ready replica")
    }
    
    func toInt32Ptr(i int32) *int32 {
        return &i
    }
    
    3年前
  • 半兽人 回复 范姐Kubernetes是否可以在一个Yaml文件中合并Pod.yaml和Service.yaml(不是Deployment类型) 中 :

    是的,你可以把任何你想要的资源放在一个yaml文件中,你只需要用3个破折号把它们分开,例如

    apiVersion: apps/v1
    kind: Service
    
    ---
    apiVersion: apps/v1
    kind: Pod
    
    3年前
  • 范姐 回复 半兽人Kubernetes容器args报错 中 :

    感谢您的解释,按照这个解决了。不过我还必须删除URL周围的引号,因为使用shell运行命令的话就是必需的。

    3年前
  • 半兽人 回复 范姐Kubernetes容器args报错 中 :

    Linux的命令是由一连串的单词组成的。如果你在shell提示符下键入一个命令,它就会负责帮你拆成单词,但在Kubernetes args: list中,你需要自己拆出单词。

    args:
      - run
      - '<url-to-collection>'
      # 你想让它们作为两个独立的参数,所以需要是2个独立列表
      - --env-var
      - baseUrl=<kubernetes-hostname>
    

    如果两个参数在同一个列表项中,就是一个 "单词"。

    # /bin/ls "/app/some directory/some file"
    command:
      - /bin/ls
      # 单个参数,包括空格
      - /app/some directory/some file
    

    同样的规则适用于Docker Compose entrypoint:command:以及JSON-syntax Dockerfile ENTRYPOINTCMD指令,只是Docker原生形式也都接受一个纯字符串,它们将在空格上进行分割(在Dockerfile情况下使用shell,但在Compose情况下不使用)。

    在你提供的docker run命令中,你的主机系统上的shell会先进行处理,所以--env-var选项和baseUrl=...参数在传递到容器中之前会被拆成单独的参数。

    3年前
  • 3年前
  • 订阅了 kafka 主题! · 4年前
  • 订阅了 kubernetes 主题! · 4年前