搭建k3s+MetalLB环境并部署Kubernetes-Dashboard
首先
お手軽&軽量なk8s環境としてお馴染みなk3sを、MetalLBと組み合わせた時にハマったのでメモ。
サンプルとしてKubernetes-DashboardをloadBalancerIPを利用するようにデプロイするところまで書きます。
安装k3s
在k3s中,已经默认实现了软件负载均衡器,如果在标准安装的状态下添加MetalLB会导致其行为不稳定。
因此,在安装时将k3s的负载均衡器禁用。
$ curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--no-deploy servicelb" sh -
公式文件中也有提到。
(Option) 在我手上的Mac上使用kubectl。
在安装了k3s的服务器上执行以下操作。
$ sudo cp /etc/rancher/k3s/k3s.yaml /tmp/
$ sudo chmod +r /tmp/k3s.yaml
假设已经安装了Homebrew,在Mac上执行以下操作。
$ brew install kubectl
$ mkdir ~/.kube
$ scp <k3sサーバのIP>:/tmp/k3s.yaml ~/.kube/config
$ sed -i -e 's/127.0.0.1/<k3sサーバのIP>/g' ~/.kube/config
k3sサーバ上の/tmp/k3s.yamlは適宜削除しておくこと。
MetalLBインストール & 設定
公式サイトのInstallationに沿って実施。
2019/10/04時点ではv0.8.1なので以下の通り。
$ kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
インストール後、Configurationの内容を見ながらconfig用yamlファイルを作る。
今回は単純にk3sのNodeと同じNWのIPレンジを使いたいだけなので以下のように作成。
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.24.100-192.168.24.199
$ kubectl apply -f metallb-config.yaml
Kubernetes-Dashboardインストール
这次部署将采用以下条件:
– 分配独立的IP(使用192.168.24.101)
– 使用HTTP进行访问
– 无需身份验证进行访问
由于安全性等方面的考虑被忽略,如果有需要的话请适时进行修正。
查看Github的Releases,寻找合适版本的yaml文件并进行下载。
本次使用的版本是v2.0.0-beta4。
$ wget -O kubernetes-dashboard.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
下面进行修改。
--- kubernetes-dashboard.yaml.orig 2019-10-04 00:37:28.000000000 +0900
+++ kubernetes-dashboard.yaml 2019-10-04 00:48:09.000000000 +0900
@@ -38,8 +38,10 @@
namespace: kubernetes-dashboard
spec:
ports:
- - port: 443
- targetPort: 8443
+ - port: 80
+ targetPort: 9090
+ type: LoadBalancer
+ loadBalancerIP: 192.168.24.101
selector:
k8s-app: kubernetes-dashboard
@@ -160,7 +162,7 @@
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
- name: kubernetes-dashboard
+ name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
@@ -191,10 +193,10 @@
image: kubernetesui/dashboard:v2.0.0-beta4
imagePullPolicy: Always
ports:
- - containerPort: 8443
+ - containerPort: 9090
protocol: TCP
args:
- - --auto-generate-certificates
+ # - --auto-generate-certificates
- --namespace=kubernetes-dashboard
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
@@ -210,7 +212,7 @@
httpGet:
- scheme: HTTPS
+ scheme: HTTP
path: /
- port: 8443
+ port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
volumes:
使用编辑的yaml文件进行部署。
$ kubectl apply -f kubernetes-dashboard.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
