AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[kubectl](server)

Martin Hope
guettli
Asked: 2022-02-02 12:12:36 +0800 CST

如何通过 kubectl 执行到**节点**(不是容器)

  • 0

如何执行到 K8s节点?

到目前为止,我只找到了执行到节点上运行的容器的方法。

我想避免ssh。

kubernetes kubectl
  • 2 个回答
  • 784 Views
Martin Hope
arjunbnair
Asked: 2022-01-03 02:49:07 +0800 CST

Kubernetes API 服务器无法注册主节点

  • 1

我试图使用 kubeadm 创建一个 Kubernetes 集群。我启动了一个 Ubuntu 18.04 服务器,安装了 docker(确保 docker.service 正在运行),安装了 kubeadm kubelet 和 kubectl。

以下是我执行的步骤:

sudo apt-get update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` test"
sudo apt update
sudo apt install docker-ce
sudo systemctl enable docker
sudo systemctl start docker

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl -y
sudo apt-mark hold kubeadm kubelet kubectl 
kubeadm version
swapoff –a

此外,为了配置 Docker cgroup 驱动程序,我编辑了/etc/systemd/system/kubelet.service.d/10-kubeadm.conf。在文件中,我添加Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"并注释掉了Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml".

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf供参考:

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
#Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

在此之后我跑了:systemctl daemon-reload和systemctl restart kubelet。kubelet.service 运行良好。

接下来,我运行sudo kubeadm init --pod-network-cidr=10.244.0.0/16并收到以下错误:

root@ip-172-31-1-238:/home/ubuntu# kubeadm init --pod-network-cidr=10.244.0.0/16
[init] 使用 Kubernetes 版本:v1.23.1
[preflight] 运行飞行前检查
[preflight] 拉取设置 Kubernetes 集群所需的映像
[preflight] 这可能需要一两分钟,具体取决于您的 Internet 连接速度
[preflight] 您也可以使用“kubeadm config images pull”预先执行此操作
[ certs] 使用 certificateDir 文件夹 "/etc/kubernetes/pki"
[certs] 生成 "ca" 证书和密钥
[certs] 生成 "apiserver" 证书和密钥
[certs] 为 DNS 名称 [ip-172-31-1-238 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] 和 IP [10.96.0.1 172.31.1.238] 签名的 apiserver 服务证书
[certs] 生成“apiserver-kubelet-client”证书和密钥
[certs] 生成“front-proxy-ca”证书和密钥
[certs] 生成“front-proxy-client”证书和密钥
[certs] 生成“etcd/ca” " 证书和密钥
[certs] 生成 "etcd/server" 证书和密钥
[certs] etcd/server 为 DNS 名称 [ip-172-31-1-238 localhost] 和 IP [172.31.1.238 127.0.0.1 签名::1]
[certs] 生成“etcd/peer”证书和密钥
[certs] etcd/peer 服务证书为 DNS 名称 [ip-172-31-1-238 localhost] 和 IP [172.31.1.238 127.0.0.1 ::1]
[certs] 生成“etcd/healthcheck-client”证书和密钥
[certs] 生成 "apiserver-etcd-client" 证书和密钥
[certs] 生成 "sa" 密钥和公钥
[kubeconfig] 使用 kubeconfig 文件夹 "/etc/kubernetes"
[kubeconfig] 编写 "admin.conf" kubeconfig 文件
[kubeconfig] 写入“kubelet.conf”kubeconfig 文件
[kubeconfig] 写入“controller-manager.conf”kubeconfig 文件
[kubeconfig] 写入“scheduler.conf”kubeconfig 文件
[kubelet-start] 将带有标志的 kubelet 环境文件写入文件“/ var/lib/kubelet/kubeadm 标志。环境"
[kubelet-start] 将 kubelet 配置写入文件 "/var/lib/kubelet/config.yaml"
[kubelet-start] 启动 kubelet
[control-plane] 使用清单文件夹 "/etc/kubernetes/manifests"
[control-plane ] 为“kube-apiserver”
创建静态 Pod 清单 [control-plane] 为“kube-controller-manager”
创建静态 Pod 清单 [control-plane] 为“kube-scheduler”
创建静态 Pod 清单 [etcd] 创建静态 Pod 清单对于“/etc/kubernetes/manifests”中的本地 etcd
[wait-control-plane] 等待 kubelet 作为静态 Pod 从目录“/etc/kubernetes/manifests”启动控制平面。这最多可能需要 4m0s
[kubelet-check] 40s 的初始超时已通过。

    Unfortunately, an error has occurred:  
            timed out waiting for the condition  

    This error is likely caused by:  
            - The kubelet is not running  
            - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)  

    If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:  
            - 'systemctl status kubelet'  
            - 'journalctl -xeu kubelet'  

    Additionally, a control plane component may have crashed or exited when started by the container runtime.  
    To troubleshoot, list all containers using your preferred container runtimes CLI.  

    Here is one example how you may list all Kubernetes containers running in docker:  
            - 'docker ps -a | grep kube | grep -v pause'  
             Once you have found the failing container, you can inspect its logs with:  
            - 'docker logs CONTAINERID'  

运行后systemctl status kubelet.service,似乎 kubelet 运行良好。
但是,运行后journalctl -xeu kubelet,我得到以下日志:

kubelet.go:2347]“容器运行时网络未准备好”networkReady="NetworkReady=false 原因:NetworkPluginNotReady 消息:docker:网络插件未准备好:cni 配置未初始化"
kubelet.go:2422]"获取节点时出错"err="节点“ip-172-31-1-238”未找到”
kubelet.go:2422]“获取节点时出错”err="节点“ip-172-31-1-238”未找到”
controller.go:144]无法确保租约存在,将在 7 秒后重试,错误:Get "https://172.31.1.238:6443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/ip-172-31 -1-238?timeout=10s": dial tcp 172.31.1.238:6443: connect: connection
denied kubelet.go:2422] "Error getting node" err="node "ip-172-31-1-238" not found "
kubelet.go:2422]“获取节点时出错”err="未找到节点“ip-172-31-1-238”"
kubelet_node_status.go:70] "正在尝试注册节点" node="ip-172-31-1-238"
kubelet_node_status.go:92] "无法向 API 服务器注册节点" err="Post "https://172.31 .1.238:6443/api/v1/nodes": 拨打 tcp 172.31.1.238:6443: 连接: 连接被拒绝" node="ip-172-31-1-238"
kubelet.go:2422] "获取节点时出错" 错误="节点 "ip-172-31-1-238" 未找到"

版本:
Docker: Docker 版本 20.10.12,构建 e91ed57
Kubeadm: {Major:“1”,Minor:“23”,GitVersion:“v1.23.1”,GitCommit:“86ec240af8cbd1b60bcc4c03c20da9b98005b92e”,GitTreeState:“clean”,BuildDate:” 2021-12-16T11:39:51Z",GoVersion:"go1.17.5",编译器:"gc",平台:"linux/amd64"}

不确定这是否是 Kube Api Server 和 Kubelet 之间的连接问题。
有谁知道如何解决这一问题?

linux docker kubernetes kubeadm kubectl
  • 3 个回答
  • 11938 Views
Martin Hope
Sara June
Asked: 2021-10-08 04:47:29 +0800 CST

如何使用 kustomize 从属性文件加载配置映射?

  • 2

我尝试使用 kustomize 将属性文件加载为配置映射。

为此,我在 github链接中创建了一个示例集。

使用基本文件:

#kustomize build base
apiVersion: v1
data:
  config: |-
    dbport=1234
    dcname=sfsdf
    dbssl=false
    locktime=300
    domainuser=
kind: ConfigMap
metadata:
  labels:
    owner: sara
  name: database-configmap
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
    owner: sara
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
      owner: sara
  template:
    metadata:
      labels:
        app: nginx
        owner: sara
    spec:
      containers:
      - image: nginx
        name: nginx

使用外部文件:

#kustomize build file
apiVersion: v1
data:
  config: "dbport=156767\r\ndcname=dfsd\r\ndbssl=false\r\nlocktime=300\r\ndomainuser=somedts"
kind: ConfigMap
metadata:
  labels:
    env: dev
    owner: sara
  name: dev-database-configmap
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
    env: dev
    owner: sara
  name: dev-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
      env: dev
      owner: sara
  template:
    metadata:
      labels:
        app: nginx
        env: dev
        owner: sara
    spec:
      containers:
      - image: nginx
        name: nginx

如果您观察到 configmap|被删除并替换\r\n为单个字符串。如何修复这种对齐方式?

kubernetes kubectl
  • 1 个回答
  • 610 Views
Martin Hope
Stefan
Asked: 2021-09-29 06:10:40 +0800 CST

带有 Letsencrypt 的 Kubernetes 证书

  • 1

我想用letsencrypt创建一个证书。

当我运行这个 yml

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: grafana-tls
  namespace: grafana
type: "kubernetes.io/tls"
spec:
  secretName: grafana-tls
  issuerRef:
    name: letsencrypt-prod
  dnsNames:
     - mydomain.com

和kubectl apply -f .\grafana-tls.yml --validate=false

我遇到了以下错误

未找到引用的“颁发者”:未找到 issuer.cert-manager.io “letsencrypt-prod”

但是当我执行时kubectl get clusterissuer ,我遇到了这个结果

姓名准备年龄

letencrypt-prod True 3d22h

为了部署集群发行者,我使用了这个配置

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
  namespace: ingress-basic
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: myEmail
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx
kubernetes kubectl
  • 1 个回答
  • 262 Views
Martin Hope
Don Don Don
Asked: 2021-09-09 23:37:21 +0800 CST

Kubernetes 错误“无法附加或挂载卷”

  • 0

我使用 nginx ingress 作为负载均衡器部署了 bitnami/wordpress helm,就像这里一样。一切正常,但问题出在一些 pod 是手动创建或通过自动缩放自动创建时。其中一些(不是全部)一直处于“ContainerCreating”状态,日志如下所示:

  Normal   Scheduled    33m                  default-scheduler  Successfully assigned default/wordpress-69c8f65d96-wnkfv to main-node-d29388
  Warning  FailedMount  4m28s (x6 over 29m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[wordpress-data], unattached volumes=[default-token-s4gdj wordpress-data]: timed out waiting for the condition
  Warning  FailedMount  0s (x9 over 31m)     kubelet            Unable to attach or mount volumes: unmounted volumes=[wordpress-data], unattached volumes=[wordpress-data default-token-s4gdj]: timed out waiting for the condition

我部署了 bitnami/wordpress,然后使用以下设置进行了升级:

helm install wordpress bitnami/wordpress --set service.type=ClusterIP --set ingress.enabled=true --set ingress.certManager=true --set ingress.annotations."kubernetes\.io/ingress\.class"=nginx --set ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt-prod --set ingress.hostname=DOMAIN.com --set ingress.extraTls[0].hosts[0]=DOMAIN.com --set ingress.extraTls[0].secretName=wordpress.local-tls --set wordpressPassword=PASSWORD --set autoscaling.enabled=true --set autoscaling.minReplicas=1 autoscaling.maxReplicas=30

kubectl get pods 看起来像这样

ingress-nginx-ingress-controller-84bff86888-f4tpb                 1/1     Running             0          2d3h
ingress-nginx-ingress-controller-default-backend-c5b786dbbqw5xz   1/1     Running             0          2d3h
load-generator                                                    1/1     Running             0          71s
wordpress-69c8f65d96-48jd9                                        0/1     ContainerCreating   0          18m
wordpress-69c8f65d96-66ftt                                        0/1     ContainerCreating   0          56m
wordpress-69c8f65d96-dq7xq                                        1/1     Running             0          100m
wordpress-69c8f65d96-fbnt6                                        1/1     Running             0          101m
wordpress-69c8f65d96-wnkfv                                        0/1     ContainerCreating   0          56m
wordpress-mariadb-0                                               1/1     Running             0          8h

怎样做才能使新 pod 没有这个问题并让它们启动?

kubernetes nginx-ingress bitnami helm kubectl
  • 1 个回答
  • 4051 Views
Martin Hope
solveit
Asked: 2021-09-03 06:01:53 +0800 CST

如何删除 K3s 集群中除 kube-system 之外的所有命名空间

  • 2

我有一个带有系统 pod(即kube-system命名空间)和我的应用程序 pod 的 K3s 集群:

kube-system   pod/calico-node-xxxx                          
kube-system   pod/calico-kube-controllers-xxxxxx   
kube-system   pod/metrics-server-xxxxx
kube-system   pod/local-path-provisioner-xxxxx
kube-system   pod/coredns-xxxxx
app-system    pod/my-app-xxxx
db-system     pod/my-db-xxxxx

我正在寻找一个 shell/kubectl 命令(用于自动化脚本),它可以删除我的应用程序命名空间(想要修改kubectl delete namespace app-system db-system)而不在命令中提及应用程序命名空间名称(因为将来如果集群中有更多应用程序命名空间,我必须每次编辑此脚本)。

这意味着我想删除集群中的所有命名空间,除了 kube-system

类似的东西 - kubectl delete namespace -v kube-system(我知道-v这里不是一个有效的参数,只是展示了 grep-v是如何使用除了以下单词的。寻找类似的东西kubectl delete ns...)

kubernetes kubectl k3s
  • 3 个回答
  • 694 Views
Martin Hope
Juan Jimenez
Asked: 2021-07-15 20:42:34 +0800 CST

当 AWS CodeBuild 生成新的容器映像时,在 Rancher 上强制部署

  • 0

我有一个在 AWS EKS 上运行的 Rancher 2.5 集群。我的 CI 是通过一个到 Github 存储库的 webhook 在 CodeBuild 中完成的。buildspec.yml 可以很好地运行构建,标记容器,然后将它们发送到我在 AWS ECR 上的私有注册表,但我还没有找到一种简单的方法来触发集群上的部署更新以让它知道新的容器版本可用。我怎么做?

amazon-web-services eks kubectl rancher
  • 1 个回答
  • 56 Views
Martin Hope
Chayan Ghosh
Asked: 2021-06-07 21:55:14 +0800 CST

双端口转发kubernetes + docker

  • 0

概括:

我有一个运行 kubectl port-forward 的 docker 容器,它将作为 k8s 服务运行的 postgres 服务的端口(5432)转发到本地端口(2223)。在 Dockerfile 中,我已经暴露了相关的 2223 端口。然后我通过发布所述端口 ( -p 2223:2223)来运行容器

现在,当我尝试通过 访问 postgrespsql -h localhost -p 2223时,出现以下错误:

psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

但是,当我docker exec -ti对上述容器执行上述操作并运行上述 psql 命令时,我可以连接到 postgres。

Dockerfile 命令:

EXPOSE 2223
CMD ["bash", "-c", "kubectl -n namespace_test port-forward service/postgres-11-2 2223:5432"]

Docker 运行命令:

docker run -it --name=k8s-conn-12 -p 2223:2223 my_image_name:latest

docker run 命令的输出:

Forwarding from 127.0.0.1:2223 -> 5432

所以端口转发成功,我可以从 docker 容器内部连接到 postgres 实例。我不能做的是从容器外部连接到暴露和发布的端口

port-forwarding docker kubernetes kubectl psql
  • 1 个回答
  • 1188 Views
Martin Hope
Nikhil
Asked: 2021-05-17 04:02:52 +0800 CST

如何找到 Kubernetes POD 重启的原因

  • 7

在我的集群中将我的 pod 扩展到 20 个,当我看到第二天重新创建了几个缩放的 pod 时。

当我说 POD 重新创建时,它会被删除并重新创建,并且重新创建的 pod 和缩放的 pod 的时间戳会有所不同。

我无法找到重新创建 POD 的原因。

当 POD 被删除并消失时,我找不到要重新创建的 POD。journalctl 中没有关于重新创建 POD 的日志。有什么方法可以进一步调试以找到重新创建 POD 的原因。或 POD 被删除的原因可能是什么。

注意:我已经定义了就绪和活跃度探测器,但这些探测器将作用于容器并且不会导致 POD 重新创建,这是我的理解。

kubernetes kubectl
  • 1 个回答
  • 16932 Views
Martin Hope
Adam C
Asked: 2021-01-22 07:40:42 +0800 CST

在 Kubernetes 集群中将 kubectl 命令作为 cronjobs 运行会导致连接被拒绝错误

  • 0

当使用来自 kubernetes(基于 EKS)集群内部kubectl的映像运行命令时,我希望该命令能够获取环境变量并连接到本地集群以运行命令。具体来说,我正在使用它在集群上运行一些内务处理,但容器只是出错(并最终进入 crashBackoff 循环)。bitnami/kubectlKUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORTkubernetes cronjobs

容器日志中的错误消息如下:

与服务器 localhost:8080 的连接被拒绝 - 您是否指定了正确的主机或端口?

这localhost:8080特别奇怪,因为它从未使用过,并且在我知道的任何地方都没有配置 - 切换到简单的 shell 命令可以让作业成功运行,但 kubectl 拒绝工作。运行env确认KUBE变量确实被注入并正确设置。最近唯一的变化是将这些作业移动到由terraform kubernetes cronjob 资源管理,而不是直接通过 YAML 文件管理。每个 cronjob 都与具有适当权限的服务帐户相关联,并且仍然在 cronjob 中正确配置。

作为参考,这里是 cronjob 的略微编辑版本:

resource "kubernetes_cron_job" "test_cronjob" {
  provider = kubernetes.region

  metadata {
    name = "test-cronjob"
    namespace = "default"
  }
  spec {
    concurrency_policy = "Allow"
    failed_jobs_history_limit = 5
    schedule = "*/5 * * * *"
    job_template {
      metadata {}
      spec {
        backoff_limit = 2
        parallelism = 1
        completions = 1
        template {
          metadata {}
          spec {
            container {
              name    = "kubectl"
              image   = "bitnami/kubectl"
              command = ["/bin/sh", "-c", <<-EOT
                                            env && echo "test";    
                                            EOT
                                            ]            
                        }
            restart_policy = "OnFailure"
            service_account_name = "sa-test"
          }
        }
      }
    }
  }
}
kubernetes terraform amazon-eks kubectl
  • 1 个回答
  • 770 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve