本章介绍所需环境:ubuntu18.04,建立在上一篇微服务探索之路01篇已经安装了docker的基础上。
1 替换k8s镜像源为国内镜像
- 进入目录
cd /etc/apt/sources.list.d
- 编辑文件
vim kubernetes.list
执行之后打开一个编辑界面按字母i进入编辑状态复制deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
放进去,按esc再:wq保存
- 执行
apt-get update
如果出现如上图提示,需要先执行
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071
key后面那一串就是截图里的那一串根据系统提示修改为对应的就行,执行完如下图
这时候再重新执行apt-get update
就成功了
- 执行
apt upgrade
遇到选择看不懂就选择y,看的懂就按照自己想要的选择遇到选择直接默认ok下一步,最后执行完成表示镜像已经替换为国内镜像,并且所有源都更新为新版本
2 安装k8s
-
执行
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
-
执行
kubeadm version
查看版本号
3 安装镜像包
- 需要安装多个镜像所有写一个脚本来完成
1.先退到最外层目录下或者去自己知道的目录(这边直接退到最外层目录执行cd
回车)
2.创建k8spull.sh
内容为(文件创建和编辑方法可以百度vim用法)
for i in `kubeadm config images list`; do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
3.执行chmod +x k8spull.sh
给脚本文件赋予权限
4.执行脚本sh k8spull.sh
5.执行docker images
,再执行kubeadm config images list
对比镜像是否全都加载成功
这边发现少了一个coredns,可以手动拉取试试(执行docker pull registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.6
)
尝试后如上图发现阿里云镜像里面没有这个版本号也不知道去哪查看最新的版本,所以这边选择使用dockerhub里的最新版本1.8.3执行
docker pull rancher/coredns-coredns:1.8.3
,然后更改镜像名执行
docker tag rancher/coredns-coredns:1.8.3 k8s.gcr.io/coredns/coredns:v1.8.6
,最后删除原始镜像执行
docker rmi rancher/coredns-coredns:1.8.3
重新执行docker images
检查镜像是否已经成功,如下图表示成功
4 初始化kubeadm
- 执行
kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
5 设置网络插件
1.设置环境变量执行export KUBECONFIG=/etc/kubernetes/admin.conf
,执行完这里顺便把环境变量加到系统配置里防止下次重启服务器的时候没有变量,具体操作如下
vim /etc/profile
打开之后在底部添加export KUBECONFIG=/etc/kubernetes/admin.conf
,添加之后保存退出文件,然后执行source /etc/profile
使其生效。
2.编写yml进行资源配置,这里可以直接使用网络上别人写好的yml文件直接用以下命令和地址即可
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
需特别注意:
如果执行上一行命令报错,内容包含did you specify the right host or port,这时候是因为kubelet没有正常启动,可以执行journalctl -xefu kubelet
查看具体的错误日志,本次配置遇到的错误是docker和kubelet的驱动程序不同具体如图
解决方法:
(1).查看文件/var/lib/kubelet/config.yaml里的驱动
(2).把docker的改为跟这个一样的方式
编辑文件/etc/docker/daemon.json
,如果文件本身有内容那就在对象内添加一行"exec-opts": ["native.cgroupdriver=systemd"]
,如果空文件那就要用大括号包起来{"exec-opts": ["native.cgroupdriver=systemd"]}
,然后保存退出文件。
(3)重启服务,执行以下三个命令
-
systemctl daemon-reload
-
systemctl restart docker
-
systemctl restart kubelet
运行成功,出现下类似图
3.执行kubectl get nodes
查看如果出现如下图内容表示已经成功部署可以进行增加和移除Node(节点)
6 安装面板
1.下载yaml文件wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
版本号可以去github上选择tag查看最新的或者选择合适自己的
2.打开yaml文件查看镜像然后用docker拉取镜像,搜索文件中image关键字可以找到以下两个相关的镜像,版本不一样版本号也会对应改变
镜像1命令:docker pull kubernetesui/dashboard:v2.4.0
镜像2命令:docker pull kubernetesui/metrics-scraper:v1.0.7
3.修改yaml文件将访问方式改为NodePort,如下图
改完保存退出,然后执行kubectl apply -f recommended.yaml
以上执行完之后执行这个看一下是否有绑定好端口号kubectl get svc --namespace=kubernetes-dashboard
,结果如下图表示成功
7 配置Token
1.打开https://ip:端口号,会出现如下界面这时不要继续操作界面,需要先配置Token
2.创建文件vim dashboard-admin.yaml
,文件内容为
apiVersion: v1
kind: ServiceAccount
metadata:
name: kubernetes-dashboard-admin
namespace: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
namespace: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-admin
namespace: kubernetes-dashboard
3.运行刚才创建的yaml文件直接为 Dashboard 赋予 Admin 的权限kubectl create -f dashboard-admin.yaml
4.查找创建好的token,先执行kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}'
,出现如下图
然后根据结果里返回的名称执行下面的命令kubectl -n kubernetes-dashboard describe secret kubernetes-dashboard-admin-token-g7vxn
这命令里的kubernetes-dashboard-admin-token-g7vxn是上一个命令返回的要根据自己得到的替换
5.复制token然后登陆
登陆之后可以切换命名空间查看相关的内容
本章结束,下一章详解如何将自己的项目部署至k8s
以下为遇到错误的记录和解决方案如下:
1.遇到kube-flannel无限自动重启,先删除它,等会重新安装执行删除命令
kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
删除残留文件rm -rf /var/lib/cni/
,rm -f /etc/cni/net.d/*
2.遇到一直循环创建k8s-pod,这里不知道怎么回事直接重置所有配置,执行命令kubeadm reset
之后重新从第4步初始化环境开始,先给docker设置一下国内镜像这一步之前没操作过;打开文件vim /etc/docker/daemon.json
,添加"registry-mirrors":[ "https://阿里云加速的id.mirror.aliyuncs.com" ]
,这个加速id参考第一篇有说怎么拿到。
下面开始重新运行:
(1)重新初始化kubeadm,直接照着上面的第4步
(2)重新安装kube-flannel网络环境,为了防止一直自动重启,我们这边先下载yml做完修改再执行
下载,找个路径然后执行wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然后打开vim kube-flannel.yml
修改内存50mi为200mi
改完保存之后给文件添加可执行权限chmod +x filename
,最后执行kubectl apply -f kube-flannel.yml
最后查看是否运行成功如下图
图上用到的命令kubectl get pods -o wide --all-namespaces
,kubectl get nodes