2018-04-02-kubernetes1.9 install online

本文主要介绍通过在线方式kubeadm部署kubernetes1.9. 部署环境需要能够拉去google镜像

主要内容:

  1. kubeadm init 自定义etcd环境,支持etcd证书模式

  2. kubeadm join的异常解决

  3. 两种网络部署方式,flannel与calico

  4. dashboard的https与http两种部署方式。

  5. 部署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

  1. 准备证书

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有以下文件:

  1. 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 服务:

  1. node1,node2 etcd安装(如果单点etcd跳过此步)

从master1 copy配置文件

vim /etc/etcd/etcd.conf, ETCD_NAME改为node1 node2, 及修改IP

  1. 启动etcd systemctl enable etcd.service && systemctl start etcd.service 如为集群,则都要启动 验证,集群内节点注意时间要同步

  2. 写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二选一

  1. 如果使用的k8s内置etcd

    直接执行,注意calico.yaml中pod IP范围与init一致。

  2. 使用自己部署的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:

  1. 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