zoukankan      html  css  js  c++  java
  • [k8s]debug模式启动集群&k8s常见报错集合(on the fly)

    debug模式启动-支持sa 集群内(pod访问api)使用443加密

    • no1 no2 安装flanneld kubelet/kube-proxy
    • m1 安装etcd/ api/contruller/scheduler
    flanneld -etcd-endpoints=http://192.168.x.x:2379 -iface=eth0 -etcd-prefix=/kubernetes/network
    flanneld -etcd-endpoints=http://192.168.x.x:2379 -iface=eth0 -etcd-prefix=/kubernetes/network
    
    # 这里advertise一定要是一个具体的ip
    etcd --advertise-client-urls=http://192.168.x.x:2379 --listen-client-urls=http://0.0.0.0:2379 --debug
    
    cd /kubernetes/network/config 
    etcdctl set /kubernetes/network/config < flannel-config.json
    
    
    kube-apiserver     --service-cluster-ip-range=10.254.0.0/16     --etcd-servers=http://127.0.0.1:2379     --insecure-bind-address=0.0.0.0     --admission-control=ServiceAccount     --service-account-key-file=/root/ssl/ca.key --client-ca-file=/root/ssl/ca.crt    --tls-cert-file=/root/ssl/server.crt --tls-private-key-file=/root/ssl/server.key --allow-privileged=true --storage-backend=etcd2  --v=2
    
    
    kube-controller-manager   --master=http://127.0.0.1:8080   --service-account-private-key-file=/root/ssl/ca.key  --cluster-signing-cert-file=/root/ssl/ca.crt --cluster-signing-key-file=/root/ssl/ca.key --root-ca-file=/root/ssl/ca.crt --v=2
    
     
     
    
    kube-scheduler   --master=http://127.0.0.1:8080   --v=2
    
    
    
    kubelet     --api-servers=http://192.168.x.x:8080     --allow-privileged=true     --cluster-dns=10.254.0.2     --cluster-domain=cluster.local.     --v=2
    
    
    kube-proxy  --master=http://192.168.x.x:8080  --v=2
    
    
    
    ps -ef|egrep  "kube-apiserver|kube-controller-manager|kube-scheduler"
    ps -ef|egrep --color "kubelet|kube-proxy"
    
    
    发现apiserver如果没有--allow-privileged=true字段,仅仅kubelete有,启动daemonset类型的pod会报错如下
    
    

    etcd key web浏览器

    运行在后台: 注意端口  注意etcdip
    docker run --name etcd-browser -p 0.0.0.0:8000:8000 --env ETCD_HOST=192.168.2.11 --env ETCD_PORT=2379 --env AUTH_PASS=doe -itd buddho/etcd-browser
    

    k8s报错集合

    参考: https://jimmysong.io/kubernetes-handbook/appendix/issues.html

    DaemonSet创建报错: Forbidden: disallowed by cluster policy

    The DaemonSet "skydive-agent" is invalid: spec.template.spec.containers[0].securityContext.privileged: Forbidden: disallowed by cluster policy
    
    解决: api-server也加--allow-privileged=true,因为我debug模式启的,开始时只为kubelet加了
    

    kube-proxy报错:conntrack returned error导致不同ns间的services无法互相解析

    kube-proxy报错kube-proxy[2241]: E0502 15:55:13.889842 2241 conntrack.go:42] conntrack returned error: error looking for path of conntrack: exec: "conntrack": executable file not found in $PATH
    
    解决: yum install conntrack-tools
    

    使用 Headless service的时候kubedns解析不生效

    修改 /etc/kubernetes/kubelet 文件中的 ––cluster-domain=cluster.local.  为––cluster-domain=cluster.local 最后的点去掉.
    

    helm报错,因为没socat

    解决: yum install socat -y

    flannel不通问题解决

    机器重启导致flannel的subnet变化,而docker加载的还是原来的subnet,导致node间容器不互通
    http://www.cnblogs.com/iiiiher/p/7889295.html

    kubectl 命令显示unkown排错(kubelet服务挂了)

    kubenet挂掉导致api无法访问kubenet的监控端口10250

    CronJob创建时候提示不支持

    参考

    kube-apiserver启动参数中加入--runtime-config=batch/v2alpha1=true用于支持后面的 CronJob 对象

    nginx-ingress的 DNS Policy不写时,在hostnetwork模式下,导致nginx-ingress自身无法解析集群svc

    参考:
    k8s集群里pod高负载访问apiserver的8080(api对外地址)

    • 1,我有3台api,我为他们手动建了个svc,kube-http-api,手动指定ep.
    • 2.集群内我是没用证书的,集群内的一些服务访问api都是通过域名来访问的kube-http-api
    • 3.其中我的ingess是访问的是我手动指定的api-server的域名
    • 4.ingress使用hostnetwork
    • 5.出现的问题是ingress无法访问到api-server导致ingress创建不成功(但是指定某个api的ip是可以正常访问)

    原因及解决办法:
    nginx-ingress是hostnetwork模式, 而这种模式的pod的/etc/resolve.conf的dns是继承宿主机的(相当于dokcer run --net=host,共享宿主机网络协议栈,因此也继承了网卡dns),导致访问集群里的 api svc无法解析

    只有kube-system里svc打了 kubernetes.io/cluster-service=true标签clusterinfo才出现

    参考: http://www.cnblogs.com/iiiiher/p/7880493.html#t9

    集群内部token问题和pod访问api 443问题排查

    我刚开始时候集群内外是不想用证书的,为了简单. 后来发现很多的pod访问api,他们的yaml默认都是走443 api-svc的方式. 而且有些pod启动需要secret,因此研究了下集群内证书. 目前集群内pod访问api大多走443,集群外访问一律8080.

    token问题和证书问题
    注:
    一定要在controller上和api同时都加上证书. 另外在api上需要额外的追加公私钥参数.

    kubectl delete -f cni-flannel.yml create pod后,kubectl get po没显示

    查看是不是yml里指定的sa不存在

        spec:
          serviceAccountName: flannel
    

    一个pod多个容器,如何只重启一个容器

    • 定制镜像(supervisor/s6+工作进程), kill进程的方法
    • 干掉pod(这样的话所有的容器都干掉了,考虑分pod)

    证书生成

    集群部署on the fly 见上面

    debug模式step by step

    
    192.168.14.134 m1.ma.com m1
    192.168.14.132 n1.ma.com n1
    192.168.14.133 n2.ma.com n2
    
    ########################################################################
    systemctl stop firewalld && systemctl disable firewalld
    sysctl -w net.ipv6.conf.all.disable_ipv6=1
    sysctl -w net.ipv6.conf.default.disable_ipv6=1
    sysctl -w net.ipv4.ip_forward=1 
    echo 'iptables -P FORWARD ACCEPT' >> /rc.local
    iptables -P FORWARD ACCEPT
    sysctl -p
    
    ########################################################################
    mkdir -p /kubernetes/network/config/
    cat > /kubernetes/network/config/flannel-config.json << EOF
    {
     "Network": "10.2.0.0/16",
     "SubnetLen": 24,
     "Backend": {
       "Type": "host-gw"
      }
    }
    EOF
    
    etcd --advertise-client-urls=http://0.0.0.0:2379 --listen-client-urls=http://0.0.0.0:2379 --debug
    cd /kubernetes/network/config
    etcdctl set /kubernetes/network/config < flannel-config.json
    
    
    flanneld -etcd-endpoints=http://192.168.14.134:2379 -iface=eth0 -etcd-prefix=/kubernetes/network
    
    
    cat /run/flannel/subnet.env 
    vim /usr/lib/systemd/system/docker.service
    --bip=10.2.20.1/24 --mtu=1500 --ipmasq=true
    --bip=10.2.98.1/24 --mtu=1450
    
    systemctl daemon-reload
    systemctl restart docker
    ps -ef|grep docker
    
    ########################################################################
    kube-apiserver 
        --service-cluster-ip-range=10.254.0.0/16 
        --etcd-servers=http://127.0.0.1:2379 
        --insecure-bind-address=0.0.0.0 
        --v=2
    
    --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota 
     
    kube-controller-manager 
      --master=http://127.0.0.1:8080 
      --v=2
    
    kube-scheduler 
      --master=http://127.0.0.1:8080 
      --v=2
    
    pkill kube-apiserver
    pkill kube-controller-manager
    pkill kube-scheduler
    
    ps -ef|egrep  "kube-apiserver|kube-controller-manager|kube-scheduler"
    
    
    ########################################################################
    
    kubelet 
        --api-servers=http://192.168.14.134:8080 
        --allow-privileged=true 
        --v=2
        
        
    kubelet 
        --api-servers=http://192.168.14.134:8080 
        --allow-privileged=true 
        --cluster-dns=10.254.0.2 
        --cluster-domain=cluster.local. 
        --v=2
    
    kube-proxy 
     --master=http://192.168.14.134:8080 
     --v=2
    
    
    pkill kubelet
    pkill kube-proxy
    
    ps -ef|egrep "kubelet|kube-proxy"
    
    #####################################################################
    yum install bash-com* -y
    source <(kubectl completion bash)
    
    alias kk='kubectl get pod --all-namespaces -o wide --show-labels'
    alias ks='kubectl get svc --all-namespaces -o wide --show-labels'
    alias wk='watch kubectl get pod --all-namespaces -o wide --show-labels'
    
    alias klog-dns='kubectl logs -f --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns'
    alias klog-dnsmasq='kubectl logs -f --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq'
    alias klog-sidecar='kubectl logs -f --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar'
    
    
    yum install -y conntrack-tools socat  #这个kubelet日志里看到需要
    
    
    

    建议

    至少node节点swapoff -a 关闭swap

    内核优化项

    net.ipv4.tcp_mem = 16777216 16777216 16777216
    net.ipv4.tcp_rmem = 1024 4096 16777216
    net.ipv4.tcp_wmem = 1024 4096 16777216
    net.core.rmem_default=262144
    net.core.wmem_default=262144
    net.core.rmem_max=16777216
    net.core.wmem_max=16777216
    net.core.optmem_max=16777216
    fs.file-max=2097152
    fs.nr_open=2097152
    net.nf_conntrack_max=1000000
    net.netfilter.nf_conntrack_max=1000000
    

    查看组件日志

    journalctl -u kube-apiserver -f
    
  • 相关阅读:
    spring boot actuator监控需要注意的点
    spring boot actuator端点高级进阶metris指标详解、git配置详解、自定义扩展详解
    3、尚硅谷_SSM高级整合_创建Maven项目.avi
    elasticSearch插件metricbeat收集nginx的度量指标
    elasticSearch插件的安装以及使用nginx的modles收集nginx的日志
    服务治理平台微服务介绍
    skywalking面板功能介绍2
    skywalking中表字段的信息
    js总结33 :javascript-DOM节点属性
    js教程系列32 :javascript-DOM节点操作
  • 原文地址:https://www.cnblogs.com/iiiiher/p/7888934.html
Copyright © 2011-2022 走看看