kubernetes踩坑笔记-使用kubeadmin安装k8s集群

前言

本篇写作日期2019-01-10,根据以后的版本更新,这里的教程可能会失效(在网上看到的好多教程总有些步骤不对的)

前置条件

操作系统: ubuntu 16.04+
内存 : 2g+
cpu : 2+
机器之间可以正常互相通信,ip和mac地址唯一
所有机器都可以正常访问互联网 (只有内网的机器会有奇奇怪怪的问题)
docker配置好了代理,可以正常拉取谷歌的镜像 配置教程

##

禁用swap

暂时禁用

1
swapoff -a

永久禁用

1
2
vim /etc/fstab
# 注释swap一行

安装kubectl kubeadm kubelet

这里我使用的是中科大的源

1
2
3
4
5
6
7
8
9
10
apt-get update && apt-get install -y apt-transport-https curl
curl -s http://packages.faasx.com/google/apt/doc/apt-key.gpg | sudo apt-key add -

cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF

apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

关闭防火墙

1
2
3
4
5
6
vim /etc/sysctl.conf
#添加以下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#保存后执行
sysctl -p

主节点:使用kubeadm初始化集群

1
kubeadm init

初始化成功后,控制台会打印一些信息,如kubeadm join........,复制并保存下来准备在其他的机器里使用并加入集群
还有一些命令需要执行,这些命令需要你在非root的普通账户下执行,切换回你的docker用户,执行下面的命令

1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

执行成功后,尝试使用一条命令测试是否配置成功

1
kubectl get nodes

如果成功返回本机的节点,则为配置成功

节点:加入集群

在其他机器上,执行刚刚初始化成功后保存下的join命令,执行成功后,在主节点执行kubectl get nodes可以得到该节点的信息

安装网络插件

这里使用的是Weave Net
官方文档

1
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

安装完成后,执行以下命令,当所有的pod都处于running状态后,集群正常启动了

1
kubectl get pods -n kube-system

我的结果是:

1
2
3
4
5
6
7
8
9
10
11
12
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-86c58d9df4-56269 1/1 Running 1 2d
coredns-86c58d9df4-vj5dk 1/1 Running 1 2d
etcd-ubuntu 1/1 Running 1 2d
kube-apiserver-ubuntu 1/1 Running 1 2d
kube-controller-manager-ubuntu 1/1 Running 1 2d
kube-proxy-kmll8 1/1 Running 0 47h
kube-proxy-qn8cs 1/1 Running 1 2d
kube-scheduler-ubuntu 1/1 Running 1 2d
kubernetes-dashboard-57df4db6b-psq58 1/1 Running 1 47h
weave-net-hlpfp 2/2 Running 3 47h
weave-net-lg6ch 2/2 Running 0 47h

安装Dashboard UI

官方教程

1
kubectl apply -f https://raw.githubusercontent.com/kube kubernetes-dashboard-admin.yamlard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

执行命令查询状态

1
kubectl -n kube-system get service kubernetes-dashboard

配置一个admin账户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
vim  kubernetes-dashboard-admin.yaml
# 填写以下内容
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-admin
namespace: kube-system

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-admin
namespace: kube-system

保存后创建

1
kubectl create -f kubernetes-dashboard-admin.yaml

获取admin的token

1
2
3
4
kubectl -n kube-system get secret|grep admin-token
# 复制返回结果的admin-token-xxxxx,替换下条命令
kubectl -n kube-system describe secret admin-token-xxxxx
# 保存返回数据里的token字段

登录Dashboard

官方教程
执行命令查询状态

1
kubectl -n kube-system get service kubernetes-dashboard

处于running状态后,执行kubectl proxy监听8001端口
打开浏览器,访问http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,这里我的chrome72会出现很多样式错误,所以我使用的是firefox,选择令牌(token)登录,粘贴刚刚保存好的tocken字段即可登录

部署服务

这里使用了官方教程里的sock-shop进行演示

1
2
kubectl create namespace sock-shop 
kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"

在Dashboard 里,将命名空间切换至sock-shop,当所有的pod都处于running状态后,即可访问front-end节点的物理ip:30001即可访问服务,能正常的注册,购买说明服务启动成功,pods之间可以正常的通信

1
2
#删除sock-shop服务
kubectl delete namespace sock-shop