2018-04-02-kubernetes1.9 install online
本文主要介绍通过在线方式kubeadm部署kubernetes1.9. 部署环境需要能够拉去google镜像
主要内容:
kubeadm init 自定义etcd环境,支持etcd证书模式
kubeadm join的异常解决
两种网络部署方式,flannel与calico
dashboard的https与http两种部署方式。
部署EFK、监控、ingress
install docker/kubeadm
https://kubernetes.io/docs/setup/independent/install-kubeadm/
在所有kubernetes节点上设置kubelet使用cgroupfs,与dockerd保持一致,否则kubelet会启动报错
docker配置
cat << EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=cgroupfs"]
}
EOF
systemctl daemon-reload && systemctl restart docker
默认kubelet使用的cgroup-driver=systemd,改为cgroup-driver=cgroupfs
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
重设kubelet服务,并重启kubelet服务
systemctl daemon-reload && systemctl restart kubelet关闭swap
master节点 kubeadm init 方法1
初始化集群,也会起一个etcd的pod
master节点 kubeadm init 方法2
通过配置文件init
配置文件大全见官方
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file
install etcd
准备证书
https://www.kubernetes.org.cn/3096.html
在master1需要安装CFSSL工具,这将会用来建立 TLS certificates。
创建集群 CA 与 Certificates
在这部分,将会需要产生 client 与 server 的各组件 certificates,并且替 Kubernetes admin user 产生 client 证书。
建立/etc/etcd/ssl文件夹,然后进入目录完成以下操作。
下载ca-config.json与etcd-ca-csr.json文件,并产生 CA 密钥:
下载etcd-csr.json文件,并产生 kube-apiserver certificate 证书:
若节点 IP 不同,需要修改etcd-csr.json的hosts。
完成后删除不必要文件: rm -rf *.json
确认/etc/etcd/ssl有以下文件:
Etcd 安装与设定
首先在master1节点下载 Etcd,并解压缩放到 /opt 底下与安装:
完成后新建 Etcd Group 与 User,并建立 Etcd 配置文件目录:
下载etcd相关文件,我们将来管理 Etcd:
编辑/etc/etcd/etcd.conf, 把IP改成本地IP,0.0.0.0的不要改。
如果是etcd集群,ETCD_INITIAL_CLUSTER="master1=https://192.168.1.144:2380,node1=https://192.168.1.145:2380,node2=https://192.168.1.146:2380"
master1,node1,node2与ETCD_NAME参数匹配。
建立 var 存放信息,然后启动 Etcd 服务:
node1,node2 etcd安装(如果单点etcd跳过此步)
从master1 copy配置文件
vim /etc/etcd/etcd.conf, ETCD_NAME改为node1 node2, 及修改IP
启动etcd systemctl enable etcd.service && systemctl start etcd.service 如为集群,则都要启动 验证,集群内节点注意时间要同步
写kubeadm配置文件
kubeadm init
kubeadm init 排错
完成后如果不能get node ,get po
清空/root/.kube
部署网络-flannel,与calico二选一
未部署网络时,get node,node的状态是not ready
kube-dns的状态也是pending,他依赖于网络
通过官方模版导入flannel,yaml文件中有一行参数,"Network": "10.244.0.0/16" ,这个要与kubeadm init时候参数一致,是pod IP的范围
部署网络-calico,与flannel二选一
如果使用的k8s内置etcd
直接执行,注意calico.yaml中pod IP范围与init一致。
使用自己部署的etcd
RBAC. If deploying Calico on an RBAC enabled cluster, you should first apply the ClusterRole and ClusterRoleBinding specs:
kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/rbac.yaml
Download calico.yaml Configure etcd_endpoints in the provided ConfigMap to match your etcd cluster. Then simply apply the manifest:
calicoctl
node节点kubeadm join
node节点join失败
检查master节点KUBECONFIG变量,如果不存在,则执行export
node节点kubeadm reset ,再join
如果忘了token,在master执行kubeadm token list 可以看到token node执行 kubeadm join --token n7uezq.b82snkxzseitpjzs 192.168.1.144:6443 --discovery-token-unsafe-skip-ca-verification 执行join执行要执行下kubeadm reset
Addons
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons
部署dashboard
dashboard(UI)默认是没有部署的,需要手动导入
https://github.com/kubernetes/dashboard
dashboard的语言是根据浏览器的语言自己识别的
方法1: https
方法2: http,登录不弹出认证页面
创建完成后,通过 http://任意节点的IP:32002即可访问
部署监控
Heapster + InfluxDB + Grafana
https://github.com/kubernetes/heapster/blob/master/docs/influxdb.md
部署完成后,在dashboard能看到pod的cpu、mem使用量
如果想看grafana页面,改下service,通过nodeport暴露端口
遗留问题:不显示master节点pod监控信息
部署EFK
部署ingress controller
https://github.com/kubernetes/ingress-nginx
Mandatory commands
Install with RBAC roles
检查
FAQ
kubectl 命令补全
master节点默认不可部署pod
执行如下,node-role.kubernetes.io/master 可以在 kubectl edit node master1中taint配置参数下查到
node节点pod无法启动/节点删除网络重置
node1之前反复添加过,添加之前需要清除下网络
重置kubernetes服务,重置网络。删除网络配置,link
加入节点 systemctl start docker
Last updated