参考
https://www.cnblogs.com/netsa/category/1137187.html
http://www.eryajf.net/category/%E6%9C%AF%E4%B8%9A%E4%B8%93%E6%94%BB/%E4%BA%91%E8%AE%A1%E7%AE%97/k8s

以下记录安装的问题

(一)--证书安装

创建kubernetes证书的时候,echo '{"CN":"kubernetes","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes -hostname="127.0.0.1,10.10.90.105,10.10.90.106,10.10.90.106,10.254.0.1,kubernetes,kubernetes.default" - | cfssljson -bare kubernetes

这个10.254.0.1这个ip一定要加进去

如果忘记加这个集群ip,后面来重新生成的话,建议做以下操作
1.etcdctl \
--ca-file=/etc/kubernetes/ssl/ca.pem \
--cert-file=/etc/kubernetes/ssl/kubernetes.pem \
--key-file=/etc/kubernetes/ssl/kubernetes-key.pem \
cluster-health
2.flannel
ETCD_ENDPOINTS='https://172.1.1.131:2379,https://172.1.1.132:2379,https://172.1.1.133:2379'
etcdctl --endpoints=${ETCD_ENDPOINTS} \
--ca-file=/etc/kubernetes/ssl/ca.pem \
--cert-file=/etc/kubernetes/ssl/kubernetes.pem \
--key-file=/etc/kubernetes/ssl/kubernetes-key.pem \
ls /kube-centos/network/subnets
3.kubectl get componentstatuses && ss -antl
4.查看kubernetes证书和私钥,检查是否更改成功
kubernetes.csr kubernetes-csr.json kubernetes-key.pem kubernetes.pem

openssl x509 -noout -text -in kubernetes.pem
kubernetes.csr kubernetes-csr.json kubernetes-key.pem kubernetes.pem
5.重启api等服务
systemctl restart kube-apiserver
systemctl restart kube-controller-manager
systemctl restart kube-scheduler
systemctl restart etcd

(二)--证书kubeconfig文件创建

1.token.csv文件 格式
不要使用提到的方式生成,正确的格式为
0c85f5.d0f24e941bc1273f,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

这个格式的错误,直接导致node kubelet启动后,不能用正确的角色来发送证书请求,会报错system:anonymous,太坑

这个nodes也需要复制过去

(三)--创建高可用etcd集群

(四)--Master节点安装

1.service-node-port-range=30000-32767
2.日志可能会出现连接8080端口失败,这个是因为监听端口在127.0.0.1
cat /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--advertise-address=172.1.1.131 --bind-address=172.1.1.131 --insecure-bind-address=172.1.1.131"
3.ss -antlp 查看监控端口
Kubernetes1.9 二进制部署_第1张图片

(五)--安装flannel网络插件

1.可能需要增加这个文件
[root@master etc]# cat /etc/cni/net.d/10-default.conf
{
"name": "flannel",
"type": "flannel",
"delegate": {
"bridge": "docker0",
"isDefaultGateway": true,
"mtu": 1400
}
}
2.在etcd中常见网络配置信息
3.核对相关配置信息

4.Kubernetes使用flannel做跨主机通讯的注意要点 - onlonely
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n

(六)--node节点部署

1.[root@node1 ~]# cat /etc/kubernetes/config|grep -v "#"
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=true"
KUBE_MASTER="--master=https://172.1.1.131:6443"

KUBE_MASTER 一定要改成https

2.swap 分区请在/etc/fstab注释掉,并重启虚拟机和所有服务
3.[root@node1 system]# cat docker.service|grep -v "#"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service flanneld.service
Wants=network-online.target
Requires=flanneld.service

[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS --insecure-registry hh.registry.com --exec-opt native.cgroupdriver=systemd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

cat /run/flannel/docker
DOCKER_OPT_BIP="--bip=10.30.87.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1500"
DOCKER_NETWORK_OPTIONS=" --bip=10.30.87.1/24 --ip-masq=true --mtu=1500"

4.至于防火墙要不要关闭,有的人说k8s依赖于iptables

5.配置前我们需要现在master节点上执行如下操作,创建认证角色:

cd /etc/kubernetes
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap

6.kube-proxy服务是代理作用,类似负载均衡一样,对外提供访问

(七)--coredns安装

1.安装方式有两种,上面参考的链接都可以
2.kubectl cluster-info查看
3.kubectl get services coredns -n kube-system 或者kubectl get pods -n kube-system -o wide
Kubernetes1.9 二进制部署
4.排错 kubectl logs -f coredns-6b66c5975c-lz5ss -n kube-system

(八)-- kubernetes-dashboard安装

1.dashboard 依赖于heapster,请参考<七>部署web-ui-kubernetes-1.8.6集群搭建,注意yaml文件中镜像地址的修改
2.kubectl delete -f deploy/kube-config/rbac/heapster-rbac.yaml
kubectl delete -f deploy/kube-config/influxdb/
3.访问dashboard,按照文章的去访问,我访问不了,好像是哪台node上启动了grafana,就是访问的哪台,当然可以固定一个node上,master做node我没有实现,原因在于启动kubelet端口需要改,嫌麻烦,不想弄
4.node1:4194 是监控信息,也可以通过浏览器访问
5.请选择所有命名空间
Kubernetes1.9 二进制部署_第2张图片

6.权限没有控制,任何都可以通过这个地址访问

Add
kubectl label nodes 172.1.1.132 zone=dashboard
cat /etc/kubernetes/yamlfile/heapster-1.5.0/deploy/kube-config/influxdb
Kubernetes1.9 二进制部署_第3张图片