【2021/02】本文是有关构建本地Kubernetes笔记的记录
在搭建本地 Kubernetes 和开发机器以及监控等环境的过程中的备忘录。这只是一个总结了所做的事情和看到的事物的备忘录。
建立环境
所有的操作系统都是在ESXi上使用CentOS 7搭建的。
使用kubenetes(kubeadm)搭建
我使用 kubeadm 进行构建。因为官方文档有点难以理解,所以我一边参考 Qiita 上的文章一边进行操作。
在网络部分,我使用了 calico,但安装 calico 是按照 Kubernetes 官方文档进行的。原因是我觉得,如果按照 k8s 官方指示安装 calico,可能会变得过时,所以我试图按照 calico 官方的步骤进行操作,但结果不够理想。
在执行kubeadm init时,我指定了以下选项。
由于该环境中的VM使用了’10.0.0.0/19’和’192.168.0.0/24’,因此我在设置CIDR时要考虑到这一点。
kubeadm init --apiserver-advertise-address 10.0.0.2 --pod-network-cidr 10.240.0.0/16 --service-cidr=20.96.0.0/12
同时,我们还将calico.yaml文件中的CALICO_IPV4POOL_CIDR修正为10.240.0.0/16,以适应这个变化。
-
- kubenetes公式
https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/
Install Calico networking and network policy for on-premises deployments
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
Qiita: ESXi上のCentOS7にKubeadmでKubernetesクラスタを構築する
https://qiita.com/yasubehe/items/4f7f95f2a15c4d30022a
负载均衡器(MetalLB)
如果要在k8s的service中使用LoadBalancer类型的话,在本地环境中需要自己来配置Load Balancer,这可能有些麻烦。
我尝试使用了MetalLB,它似乎相对容易准备(L2模式)。
安装过程是按照MetalLB官方指南进行的。以下的Qiita很清晰地解释了MetalLB的原理。
-
- MetalLB公式
https://metallb.universe.tf/installation/
Qiita: オンプレK8sで使えるGoogle製External Load Balancer: MetalLB
https://qiita.com/tmatsu/items/f45f0ca07b4f8489df85
开发机器
由于主节点不用于开发,因此需要另外准备一台开发机来执行kubectl命令到主节点。您可以按照官方文档中使用curl的方法,在开发机上安装kubectl命令。并且需要对安装的kubectl命令进行主节点连接的配置。
使用以下”materノード”。
kubectl config view --raw
根据显示的内容,创建并粘贴到开发机器的~/.kube/config文件中。在开发机器上执行kubectl get pod –all-namespaces等命令,若成功则完成。
-
- 公式 kubectlのインストールおよびセットアップ
https://v1-18.docs.kubernetes.io/ja/docs/tasks/tools/install-kubectl/
请确认所做的动作
因为已经基本可以运行起来了,所以先进行一次操作确认。
有一个名为EKS Workshop的内容,我将在其中运行使用的示例应用程序并进行确认。
一旦它开始运行,就可以在浏览器中观察到与后端通信的情况,它是通过部署的ecsdemo-frontend实现的。
-
- EKS Workshop
https://www.eksworkshop.com/beginner/050_deploy/
sampleアプリ
https://github.com/brentley/ecsdemo-nodejs
https://github.com/brentley/ecsdemo-frontend
https://github.com/brentley/ecsdemo-crystal
各リポジトリのkubernetes/ディレクトリ下のマニフェストをapplyして動作確認
进行 Helm 的安装
由于Helm是Kubernetes的软件包管理器,所以在接下来安装Prometheus时需要Helm。因此,我们将在开发机上安装Helm。
同时执行Helm仓库的初始化。
-
- 公式 Helmのインストール
https://helm.sh/ja/docs/intro/install/
公式 Helm チャートリポジトリを初期化する
https://helm.sh/ja/docs/intro/quickstart/
在Prometheus中进行监视
据说在Kubernetes中,监控常常使用Prometheus。这次安装使用Operator来进行Prometheus的安装(还有其他方法)。
kubectl create namespace prometheus
helm install prometheus stable/prometheus-operator --namespace prometheus
在Grafana等控制台上,您无法直接访问。虽然有介绍使用kubectl port-forward进行访问的方法,但由于我们这里有负载均衡器,所以我们将使用kubectl patch将服务的类型更改为LoadBalancer,如下所示。
kubectl -n prometheus patch service prometheus-grafana -p '{"spec":{"type": "LoadBalancer"}}'
kubectl -n prometheus patch service prometheus-prometheus-oper-prometheus -p '{"spec":{"type": "LoadBalancer"}}'
kubectl -n prometheus get service # EXTERNAL-IPとPORTを確認。
只要在浏览器中指定EXTERNAL-IP和PORT,就可以查看仪表盘。grafana的登录凭证为admin/prom-operator。
-
- prometheus-operator
https://github.com/helm/charts/tree/master/stable/prometheus-operator
K8sにPrometheus Operatorを導入して監視する