在Ubuntu 18.04 LTS上安装Kubernetes环境【主节点/从节点】
这篇文章是标题为”在本地和Kubernetes上部署微服务感知的Web应用程序的轨迹”的一部分。
首先
安装Kubernetes的方法似乎有很多种,最近似乎也出现了相对简单的安装环境。是否存在一种一步一步手动安装所需守护程序的全新方法,我并不清楚,因为这条路似乎相当漫长,所以这次我决定使用一个名为kubeadm的工具,它在官方文档中也有介绍。
因此,我并不了解每个服务的具体细节。我打算先尝试这个步骤进行安装,如果成功运行,我会总结一下。
这次的构成目标
在这篇文章中
一个主节点和一个工作节点
尽管我们的目标是实现这种结构,但只使用Master也可以先使其运作起来,所以我也打算介绍一下这个选项。(虽然仅仅是一个命令)
表記の注意
Masterノード端末とWorkerノード端末両方で作業する必要があり、タイトルの表記で
-
- Masterノードでする作業を [M]
Workerノードでする作業を [W]
通过这种写法进行区分。
环境
MasterもWorkerも、
Ubuntu 18.04 LTS
(在虚拟环境中运行)
我会将其建设在上方。
安装 Docker
由于Kubernetes是用于容器编排的工具,其中包括Docker,首先需要安装Docker。
我之前写了一篇有关Docker安装的文章,您可以参考那篇文章来进行安装。不需要使用docker-compose,可以省略。
インストールしたDockerのバージョンが合わない場合
执行”kubeadm init”命令时,有时会出现”版本不匹配无法安装”的错误。虽然有时可能只是警告,并且可能能正常工作,但仍需注意,不能保证一定能正常运行。
僕が構築した時はここで引っかかったのですが、最新のDockerバージョンにKubernetesが対応していない事があります。
その時はDockerのバージョンを対応しているものに変えてインストールして下さい。
$ sudo service docker stop
$ sudo apt install docker-ce=18.06.0~ce~3-0~ubuntu
また、
检测到 “cgroupfs” 作为 Docker 的 cgroup 驱动程序
如果您收到类似的警告,请参考以下网站。
安装Kubernetes
为了这次我们使用kubeadm进行安装,首先需要安装kubeadm。
由于默认仓库中没有kubeadm,因此首先需要注册Kubernetes的密钥和仓库。
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
然后,安装kubeadm。
$ sudo apt update
$ sudo apt install kubeadm
根据听说,从Kubernetes1.8开始,如果不关闭swap,一些必要的功能无法正常启动,因此我们将关闭swap。
$ sudo swapoff -a
我并没有完全理解,但以前即使没有进行此设置也能工作。但据说如果启动了swap,它会导致运行过程变慢,因此作为Kubernetes的规定,如果swap没有关闭,那么必需服务kubelet将无法启动。
顺便提一下,如果通过上述命令关闭了swap,需要注意,在主机的操作系统重启后会再次启用。
[M] 部署 Kubernetes
终于要安装Kubernetes了!
话虽如此,由于使用kubeadm,安装只需几个简单的步骤即可完成。
以绒布为选项,在初始化时添加。
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
インストールの最後に完了メッセージとともに、次のステップについても説明が表示されます。
この中にはWorkerのノードを追加するために必要な情報も含まれています。
## 略
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.↲
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 10.114.51.231:6443 --token xxxxxx.xxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxx
ちゃんと言われたとおりに実行します。
(僕は最初これを読み飛ばして色々と苦労しました…)
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
我已经执行了Kubernetes要求的所有任务,现在我将检查一下节点的状态。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 50s v1.12.2
この時点ではNotReadyですが、きちんとノードが存在しています。
为了 flannel,我们需要编辑 iptables。如果不这样做,后续创建的名为 core-dns 的 Pod 将永远无法启动,并进入 CrashLoopBackOff 状态。(我曾经陷入了这个问题…)
sudo sysctl net.bridge.bridge-nf-call-iptables=1
设置完成后,满怀期待地加入法兰绒。
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
过了一会儿,节点的状态会变成Ready。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 2m36s v1.12.2
师傅的基本设置到此为止了。
如果你想将部署扩展到Master节点上,可以执行以下操作。
在默认状态下,无法将部署到主节点(Master node)上。
通过执行以下命令,即可将部署到主节点(Master node)上。
$ kubectl taint nodes <名前空間> node-role.kubernetes.io/master:NoSchedule-
如果只在主节点上运行而不添加工作节点,则完成。
辛苦了。
加入Master节点
根据设置主节点时显示的信息,执行以下命令。
$ sudo kubeadm join 10.114.51.231:6443 --token xxxxxx.xxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxx
–token和–discovery-token-ca-cert-hash是在Kubernetes设置完成时显示的内容,可以直接使用。事实上,在设置完成时,会显示在Worker节点上应该执行的命令,只要直接复制粘贴即可。
然而,若时间过长,令牌将会失效。
在这种情况下,您可以通过下面的命令重新获取。
发现令牌证书哈希
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
仅需要一种选择,将以下内容以中文原生方式进行释义:
–token
$ kubeadm token create
[M] 确认Worker节点的参与
执行Worker参加命令,如果成功,则返回Master。
如果成功,当获取节点时,新添加的Worker节点将可见。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 23m v1.12.2
node1 Ready <none> 21m v1.12.2
基本的准备已经完成。
辛苦了!
[M] 安装Dashboard(赠品)
Kubernetes通常使用kubectl命令进行操作,但也有一些软件可以在Web界面上查看当前配置和运行状态,以及执行简单命令。由于这些软件也在Kubernetes上运行,下面将介绍安装方法。
首先下载yaml文件。
$ wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml
我会对下载下来的文件进行部分编辑。
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort <------ ここを追加
ports:
- port: 80
targetPort: 9090
nodePort: 32002 <------ ここを追加
selector:
k8s-app: kubernetes-dashboard
使用kubectl命令部署经过编辑的yaml文件。
$ kubectl create -f kubernetes-dashboard.yaml
这个仪表板已经部署完成,但默认情况下有访问限制,导致不能访问仪表板的所有功能。
创建一个类似以下的YAML文件,以准备服务帐户。
service-account.yaml的释义
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
然后创建服务账号。
$ kubectl apply -f service-account.yaml
访问以下地址,您将能够看到仪表盘。
サーバーip:32002

根据这个设置,看起来所有访问的人都可以访问仪表盘的全部功能,所以需要适当设置权限,或在不需要时删除仪表盘。因为前者对我来说有些困难,所以似乎只能选择后者来运营了…
以下是参考文章的原文。
Docker 是一个开源的容器化平台。
以前的文章
Kubernetes是一种容器编排平台。
在Ubuntu 18.04上安装kubernetes
使用kubeadm在本地代理环境下部署Kubernetes集群(CentOS 7.3)
使用kubeadm创建单主节点集群
Kubernetes v1.8:升级之前
控制面板
使用Kubernetes 1.10的控制面板设置
以cluster-admin权限登录到Kubernetes控制面板。