[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是可以正常访问)
只有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)
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
[k8s]debug模式启动集群&k8s常见报错集合(on the fly)的更多相关文章
- K8S入门系列之集群二进制部署-->master篇(二)
组件版本和配置策略 组件版本 Kubernetes 1.16.2 Docker 19.03-ce Etcd 3.3.17 https://github.com/etcd-io/etcd/release ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- 2、二进制安装K8s 之 部署ETCD集群
二进制安装K8s 之 部署ETCD集群 一.下载安装cfssl,用于k8s证书签名 二进制包地址:https://pkg.cfssl.org/ 所需软件包: cfssl 1.6.0 cfssljson ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- [原创]自动化部署K8S(v1.10.11)集群
标准运维实现自动化部署K8S集群主要分两步,第一步是部署gse-agent,拱第二步执行部署. 第一步:部署gse-agent.如下: 第二步:部署k8s集群.主要通过作业平台分为5小步执 ...
- IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: IntelliJ IDEA的下载 IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...
随机推荐
- Nginx配置以及域名转发
工程中的nginx配置 #user nobody; worker_processes 24; error_log /home/xxx/opt/nginx/logs/error.log; pid /ho ...
- linux 学习笔记 wc命令
#wc 文件名.txt 输出 4 13 65 文件名.txt -->4 行13个单词 #wc -w 文件名.txt 统计单词数量 #wc -l 文件名.txt 统计行数 #wc -c 文 ...
- 数字进度条组件NumberProgressBar
数字进度条组件NumberProgressBar NumberProgressBar是一款数字进度条组件.它不仅可以通过进度条的变化展现进度,还可以通过跟随文字精确表示进度值.开发者可以对进度条进行 ...
- Squid快速入门(yum安装)
加油站代理服务器 前言 Squid是一个Linux系统下优秀的代理服务器软件.Squid可以配置普通上网代理(正向代理).反向代理.透明代理.Squid接收用户的下载申请,并自动处理所下载的数据.当一 ...
- Nginx 反向代理 -- 一路上的坑
前些天刚过来新公司上班,公司的项目都挺多的,只不过项目都是第三方公司团队开发的,现在本公司要组建自己的团队,我作为一个Java后台人员去接手第三方公司的全部项目,我已经是直接崩溃了(先解释一下我崩溃的 ...
- 2017-9-14-Linux移植:加快Linux主机的启动速度
参考文章:http://www.mintos.org/skill/fast-boot.html 今天本来不打算写Blog了,Linux笔记本开机太慢了,浪费生命.何不干脆写一篇关于加快Linux主机启 ...
- 【DWM1000】 code 解密7一ANCHOR接收到BLINK
接着之前ANCHOR的代码分析,但接收到无线数据,应该执行如下代码 case TA_RX_WAIT_DATA : //already recive a message ...
- C++ STL中哈希表Map 与 hash_map 介绍
0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能.例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华 ...
- java里的基本数据类型和引用数据类型
一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...
- BZOJ2138 : stone
根据Hall定理,若存在一个区间满足内部需求数$>$内部石子数,则不存在完美匹配. 由于区间互不包含,所以设: $a[i]$表示右端点$\leq i$的区间的容量之和. $b[i]$表示左端点$ ...