zoukankan      html  css  js  c++  java
  • 阿里云手动搭建k8s搭建中遇到的问题解决(持续更新)

    ETCD搭建

      • systemd启动etcd服务的时候出现错误:Failed at step CHDIR spawning /usr/bin/etcd: No such file or directory

          解决办法:etcd.service服务配置文件中设置的工作目录WorkingDirectory=/var/lib/etcd/必须存在,否则会报以上错误

      • systemd启动etcd服务的时候出现错误:cannot assign requested address

          解决办法:绑定阿里云的私网IP

      • dial tcp 127.0.0.1:4001: getsockopt: connection refused

          解决办法:ETCD_LISTEN_CLIENT_URLS需要配置http://127.0.0.1:2379,特别注意,此处是http而不是https

    • flannel
      • failed to retrieve network config: 100: Key not found (/atomic.io) 

          解决办法:/etc/sysconfig/flanneld中的内容,FLANNEL_ETCD_PREFIX很可能是/atomic.io/network,将其改为/coreos.com/network。或者也可以通过-etcd-prefix指定

      • failed to retrieve network config: invalid character '.' after object key:value pair   

          解决办法:这种问题一般是向etcd中导入网络信息的时候出错了,检查写入的字符的中英文,ip地址是否有引号等语法问题

      • 新增etcd节点后,启动systemd服务出现Job for etcd.service failed because a timeout was exceeded

          解决办法:首先确保服务配置正确。出现该问题的原因可能时因为etcd的data-dir中的残留信息导致的,删除data-dir中的内容,重新启动etcd服务

      •  部署app的时候出现类似如下错误,这种一般是模板中定义的类型错误引起的,如下错误为 v1.ObjectMeta: Annotations: ReadString: expects " or n, but found t,可以查看Annotations中是否有错误
    Error from server (BadRequest): error when creating "sample-app.deploy.yaml": Deployment in version "v1beta2" cannot be handled as a Deployment: v1beta2.Deployment: Spec: v1beta2.DeploymentSpec: Template: v1.PodTemplateSpec: ObjectMeta: v1.ObjectMeta: Annotations: ReadString: expects " or n, but found t, error found in #10 byte of ...|/scrape":true},"labe|..., bigger context ...|rometheus.io/port":"8080","prometheus.io/scrape":true},"labels":{"app":"sample-app"}},"spec":{"conta|...
    • kubelet
      • 启动kubelet的时候出现如下错误,导致kubelet启动失败。查看kube-apiserver节点的系统日志messages,可以看到错误日志“authentication.go:64] Unable to authenticate the request due to an error: [invalid bearer token, [invalid bearer token, invalid bearer token]]”,检查kuber-apiserver启动参数中的token.csv和kubelet启动参数中指定的bootstrap文件bootstrap.kubeconfig中的token值是否一致,此外该token必须为实际数值,不能使用变量代替。出现网络错误日志的原因是部署中使用了flannel插件。
    1 Mar 22 00:27:00 node1 kubelet[701]: W0322 00:27:00.078565     701 cni.go:171] Unable to update cni config: No networks found in /etc/cni/net.d
    2 Mar 22 00:27:00 node1 kubelet[701]: I0322 00:27:00.081847     701 server.go:374] Version: v1.10.0-alpha.3
    3 Mar 22 00:27:00 node1 kubelet[701]: I0322 00:27:00.081897     701 feature_gate.go:226] feature gates: &{{} map[]}
    4 Mar 22 00:27:00 node1 kubelet[701]: I0322 00:27:00.081960     701 plugins.go:89] No cloud provider specified.
    5 Mar 22 00:27:00 node1 kubelet[701]: F0322 00:27:00.106954     701 server.go:231] failed to run Kubelet: cannot create certificate signing request: Unauthorized

    疑问解决

    1. kubelet使用tls bootstrapping功能时,kubeconfig文件中指定的了token,为何设置集群参数的时候还需要指定CA公钥?

    # 设置集群参数
    kubectl config set-cluster kubernetes 
      --certificate-authority=/etc/kubernetes/ssl/ca.pem 
      --embed-certs=true 
      --server=${KUBE_APISERVER} 
      --kubeconfig=bootstrap.kubeconfig
    
    # 设置客户端认证参数
    kubectl config set-credentials kubelet-bootstrap 
      --token=${BOOTSTRAP_TOKEN} 
      --kubeconfig=bootstrap.kubeconfig

      原因是,kubelet使用bootstrap功能时,需要使用ca证书通过apiserver的认证,使用token进行授权。证书和token分别属于两个阶段使用的内容。

    1.  k8s中哪些组件需要进行tls证书认证,哪些不需要?

    kube-scheduler、kube-controller-manager 一般和 kube-apiserver 部署在同一台机器上,它们使用非安全端口和 kube-apiserver通信,非安全端口默认为http的8080,可以使用--insecure-port指定,监听非安全端口的地址默认为127.0.0.1,可以使用--insecure-bind-address指定;

    kubelet、kube-proxy、kubectl 部署在其它 Node 节点上,如果通过安全端口访问 kube-apiserver,则必须先通过 TLS 证书认证,再通过 RBAC 授权。安全端口默认为https的6443,可以使用--secure-port指定,监听安全端口的地址默认为0.0.0.0(监听所有接口),可以使用--bind-address指定。

  • 相关阅读:
    Android软件常用下载
    布同:如何解决Python中文问题(总结了多位前人经验,初学者必看)
    布同:统计英文单词的个数
    布同:网络服务器的结构设计
    新浪微博快速发布器【正在制作中】
    布同:Python函数帮助查询小工具[v1和v2]
    写概要设计的简单心得
    手写分页 个人感觉还能优化,甚至抽象出来,需要高手讲解
    让我纠结的IIS和他的回收
    今天学了WCF记录一下
  • 原文地址:https://www.cnblogs.com/charlieroro/p/8450102.html
Copyright © 2011-2022 走看看