在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
dashboard.png

根据这个设置,看起来所有访问的人都可以访问仪表盘的全部功能,所以需要适当设置权限,或在不需要时删除仪表盘。因为前者对我来说有些困难,所以似乎只能选择后者来运营了…

以下是参考文章的原文。

Docker 是一个开源的容器化平台。

以前的文章

Kubernetes是一种容器编排平台。

在Ubuntu 18.04上安装kubernetes
使用kubeadm在本地代理环境下部署Kubernetes集群(CentOS 7.3)
使用kubeadm创建单主节点集群
Kubernetes v1.8:升级之前

控制面板

使用Kubernetes 1.10的控制面板设置
以cluster-admin权限登录到Kubernetes控制面板。

广告
将在 10 秒后关闭
bannerAds