虚拟机和云服务器上安装K8s实录与问题汇总,以及dashboard与helm的安装

标签:Kubernetes 安装记录

其他博客

在学习过程中陆续搜集到了一些不错的文章

原因

上学期的时候我在上潘茂林老师的服务计算课程的时候也接触到了容器化技术和Kubernetes,但是很可惜那时候因为计算机视觉的期末大作业过于难搞,因此没有学习。但是据说Kubernetes的安装极其艰难,因此先写下这篇安装实录,以备不时之需。安装环境是位于虚拟机中的Centos7,希望不要出什么大的问题。

因为不知道下一次看到这篇文章是什么时候,我将尽量与版本解耦合,如果到时候不存在这个工具了,那我也没什么办法。

文章安装

Virtualbox配置centos7网络,经过实践,这篇文章讲的是没有问题的。配置ip除了可以按照文章上说的以外,也可以使用nmtui工具进行配置。

从零开始搭建Kubernetes集群主要参考这篇文章。此外还有使用rancher来进行安装的,也十分简单,这里不赘述。建议安装图形界面,然后使用ssh登陆进行端口映射登陆(这个链接里有提到怎么设置),这样子比较好安装增强功能(记得提前更新系统内核,可以先按照官方docker安装上装好依赖,装完docker之后装增强功能更容易,我本人成功率为100%)。

因为kubeadm init操作需要从谷歌的网站拉镜像,国内基本是不用想的了。kubeadm搭建kubernetes这里提供了两种方法,都可以。也可以使用azure的国内gcr proxy用前一种方法提前拉取镜像,然后再修改对应的镜像名就好了(比如docker tag imageid name:tag)。

kubectl taint nodes --all node-role.kubernetes.io/master-可以允许Master节点作为工作节点,这样可以不使用minikube而创建一个单节点的K8S集群。

安装镜像

docker pull gcr.azk8s.cn/google_containers/kube-apiserver:v1.13.4
docker pull gcr.azk8s.cn/google_containers/kube-controller-manager:v1.13.4
docker pull gcr.azk8s.cn/google_containers/kube-scheduler:v1.13.4
docker pull gcr.azk8s.cn/google_containers/kube-proxy:v1.13.4
docker pull gcr.azk8s.cn/google_containers/pause:3.1
docker pull gcr.azk8s.cn/google_containers/etcd:3.2.24
docker pull gcr.azk8s.cn/google_containers/coredns:1.2.6

docker pull gcr.azk8s.cn/google_containers/kubernetes-dashboard-amd64:v1.10.1

k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

k8s.gcr.io/kube-apiserver:v1.13.4
k8s.gcr.io/kube-controller-manager:v1.13.4
k8s.gcr.io/kube-scheduler:v1.13.4
k8s.gcr.io/kube-proxy:v1.13.4
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6

常见问题解决

执行完kubeadm init后忘记token,或者token24小时过期后还想再加入新的节点,可以参考stackoverflow上的这篇文章,根据官方文档来进行操作(第二个)

执行kubeadm init的时候,可能会报错/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1,这里这篇文章给出了很好的解决方法:

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptablesecho 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

因故或者意外删除节点的时候需要执行kubeadm reset,如果出现Port 10250被占用的情况也需要进行处理,如这个

如何debug,当节点出现异常的时候,stackoverflow问题

问题:出现了下面的情况,且无法连接服务器

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

解决方案:依据官方文档,执行下面的命令来覆盖"admin"用户的默认kubeconfig文件(很多情况都可以由这个解决)

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

问题:kubectl指令出现The connection to the server localhost:8080 was refused的情况:

sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf

配置kubernetes-dashboard

也可以参考这个(虽然我用的不是nodePort而是kube proxy,这一条kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'

或是配置service nodeport,端口31064.

首先是镜像问题,因为在国内无法访问到

访问http://203.195.219.185:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login登陆,登陆前要先按照kubernetes Dashboards中的身份认证详解中所说的,制作token。

得到token,并获取token。

将token经过base64解码后作为token登陆,既可以拥有管理员权限操作整个k8s集群中的对象。或者将这串token进行base64解码后,加到admin用户的Kubeconfig文件中。

token例子

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi10NjhtOSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjU5NTRjZTcxLTQwMDktMTFlOS04ZDZiLTUyNTQwMDEyMThlYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.aCaemFbyBCm_uluT5MIiME_tAo4XE_S6d9WNj4bQIxvx_XyXALnAhZ13ysUBONx2NddoxxRAe_mF6GsNOZ9_RDdU65veJwkI8sp3AoJn5gtBysILiW1Sv1O4BV4Nnk-GVrBJysW5wcHFMN0cgC00F1iI3sry-KQRm8lV49Z3eiEn4AbuT4GqcprNGt0dN_WkiOWar-iJduwX6_xXsQ8Zf1iBmFWrZY-TAiok0nKtCn6QPex5FoZKJ5fWtJPJHvnaioKmY3lrYTHXrbz_ql08N9EHuSLUdhLdkZI-F2RzN3fY47a437h8mw3hJQhUyHUzgrq8iR8f6bOWyBjxmNW3SA

遇到的问题

kubernetes安装dashboard后输入token没反应。后面才发现没有改官网的yaml文件。像这里

安装helm

helm client的安装就不说了,很简单。

安装完client后开始安装server: helm tiller。使用helm init --upgrade命令即可开始安装,但因为安装的时候默认会向拉取gcr.io/kubernetes-helm/tiller镜像,国内怎么可能拉得了,所以可以使用阿里云的helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts,其中这个tiller的版本可以自行更改

在过程中可能会遇到Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list resource "configmaps" in API group "" in the namespace "kube-system"这样的错误信息,这时可以参考这篇issuehelm的权限问题中noprom提到的,重新安装helm tiller,建立高权限用户来解决。(虽然他执行到这一步之后还是有问题,但是我自己试过一遍之后是可以的)

使用helm安装istio

参考官方教程,使用Helm的helm template来安装。

PS:官方教程有点问题,可以参考这篇文章,注意修改istio的版本。

在下载好的压缩包内执行kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml,安装istio定义的资源。然后执行kubectl apply -f install/kubernetes/istio-demo-auth.yaml配置用户。

因为使用的不是docker的官方镜像,所以比较慢,需要耐心等待(10分钟内基本完成),或者自己先行下载好镜像。