一、Kubeapps

Kubeapps是Bitnami公司推出的一个项目,用于在web界面管理Helm应用。
Helm是一个Kubernetes的应用包管理工具,提供了复杂应用的一键启动、管理等功能。

官方安装文档非常简单:

curl -s https://api.github.com/repos/kubeapps/kubeapps/releases/latest | grep -i $(uname -s) | grep browser_download_url | cut -d '"' -f 4 | wget -i -
sudo mv kubeapps-$(uname -s| tr '[:upper:]' '[:lower:]')-amd64 /usr/local/bin/kubeapps
sudo chmod +x /usr/local/bin/kubeapps
kubeapps up
kubeapps dashboard

但是,会遇到很多问题
于是,就来到了我们的前期准备:
Kubernetes cluster (v1.8+)
配置好的kubectl
如果之前安装过helm ,请执行 helm reset 关闭,否则会与kubeapps有冲突

docker 的 storage driver 不可以是 overlayFS(CentOS 7 默认),本文选用的是devicemapper。
注意,如果选择更改storage driver,意味着所有Kubernetes组件都需要重新安装,在这里建议安装集群前就做好准备。

docker 17.03 安装

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
vim /usr/lib/systemd/system/docker.service
在[Service]标签下的
ExecStart=/usr/bin/dockerd
加入  --storage-driver=devicemapper

systemctl daemon-reload
systemctl start docker

docker info|grep Storage
确认 Storage Driver: devicemapper

按照本文开头的方法进行安装

最后一步 使用后台启动应用

nohup kubeapps dashboard & > kubeapps.log
cat kubeapps.log 查看启动端口

登陆集群中另外一台机器配置端口转发:

ssh -CfNg -L 55781:127.0.0.1:端口 原机器ip

查看登陆token

kubectl get secret $(kubectl get serviceaccount kubeapps-operator -o jsonpath='{.secrets[].name}') -o jsonpath='{.data.token}' | base64 --decode

在浏览器输入 集群ip:端口
输入刚刚的token
大功告成!!

 二、Dashboard配置并添加集群外访问

sysctl net.bridge.bridge-nf-call-iptables=1
$ https://github.com/kubernetes/dashboard
$ kubectl apply -f kubernetes-dashboard.yaml
文件附在本文后

注意:如果需要在集群外访问Dashboard,需要使用NodePort将端口映射出去,改动上述yaml的Service部分
kind: Service
apiVersion: v1
metadata:
 labels:
   k8s-app: kubernetes-dashboard
 name: kubernetes-dashboard
 namespace: kube-system
spec:
 type: NodePort
 ports:
   - port: 443
     targetPort: 8443
     nodePort:{可以指定30001-32000之间的任意数字,也可以空着}
 selector:
   k8s-app: kubernetes-dashboard
使用命令查看nodeport端口

kubectl get services kubernetes-dashboard -n kube-system

为了集群安全,从 1.7 开始,dashboard 只允许通过 https 访问,如果使用 kube proxy 则必须监听 localhost 或 127.0.0.1,对于 NodePort 没有这个限制,但是仅建议在开发环境中使用。

对于不满足这些条件的登录访问,在登录成功后浏览器不跳转,始终停在登录界面。
使用下述网址访问dashboard
https://masterIP:nodePort/#!/login

此时会提示我们选择鉴权方式,我们选择token的方式进行验证。
创建登录 token

kubectl create sa dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
echo ${DASHBOARD_LOGIN_TOKEN}

将token保存下来,登录时候填入对应位置就可以了
# Copyright 2017 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Configuration to deploy release version of the Dashboard UI compatible with
# Kubernetes 1.8.
#
# Example usage: kubectl create -f

# ------------------- Dashboard Secret ------------------- #

apiVersion: v1
kind: Secret
metadata:
 labels:
   k8s-app: kubernetes-dashboard
 name: kubernetes-dashboard-certs
 namespace: kube-system
type: Opaque

---
# ------------------- Dashboard Service Account ------------------- #

apiVersion: v1
kind: ServiceAccount
metadata:
 labels:
   k8s-app: kubernetes-dashboard
 name: kubernetes-dashboard
 namespace: kube-system

---
# ------------------- Dashboard Role & Role Binding ------------------- #

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: kubernetes-dashboard-minimal
 namespace: kube-system
rules:
 # Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.
- apiGroups: [""]
 resources: ["secrets"]
 verbs: ["create"]
 # Allow Dashboard to create 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]
 resources: ["configmaps"]
 verbs: ["create"]
 # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
- apiGroups: [""]
 resources: ["secrets"]
 resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs"]
 verbs: ["get", "update", "delete"]
 # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]
 resources: ["configmaps"]
 resourceNames: ["kubernetes-dashboard-settings"]
 verbs: ["get", "update"]
 # Allow Dashboard to get metrics from heapster.
- apiGroups: [""]
 resources: ["services"]
 resourceNames: ["heapster"]
 verbs: ["proxy"]
- apiGroups: [""]
 resources: ["services/proxy"]
 resourceNames: ["heapster", "http:heapster:", "https:heapster:"]
 verbs: ["get"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
 name: kubernetes-dashboard-minimal
 namespace: kube-system
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: Role
 name: kubernetes-dashboard-minimal
subjects:
- kind: ServiceAccount
 name: kubernetes-dashboard
 namespace: kube-system

---
# ------------------- Dashboard Deployment ------------------- #

kind: Deployment
apiVersion: apps/v1beta2
metadata:
 labels:
   k8s-app: kubernetes-dashboard
 name: kubernetes-dashboard
 namespace: kube-system
spec:
 replicas: 1
 revisionHistoryLimit: 10
 selector:
   matchLabels:
     k8s-app: kubernetes-dashboard
 template:
   metadata:
     labels:
       k8s-app: kubernetes-dashboard
   spec:
     containers:
     - name: kubernetes-dashboard
       image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
       ports:
       - containerPort: 8443
         protocol: TCP
       args:
         - --auto-generate-certificates
         # 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
         # to it. Uncomment only if the default does not work.
         # - --apiserver-host=http://my-address:port
       volumeMounts:
       - name: kubernetes-dashboard-certs
         mountPath: /certs
         # Create on-disk volume to store exec logs
       - mountPath: /tmp
         name: tmp-volume
       livenessProbe:
         httpGet:
           scheme: HTTPS
           path: /
           port: 8443
         initialDelaySeconds: 30
         timeoutSeconds: 30
     volumes:
     - name: kubernetes-dashboard-certs
       secret:
         secretName: kubernetes-dashboard-certs
     - name: tmp-volume
       emptyDir: {}
     serviceAccountName: kubernetes-dashboard
     # Comment the following tolerations if Dashboard must not be deployed on master
     tolerations:
     - key: node-role.kubernetes.io/master
       effect: NoSchedule

---
# ------------------- Dashboard Service ------------------- #

kind: Service
apiVersion: v1
metadata:
 labels:
   k8s-app: kubernetes-dashboard
 name: kubernetes-dashboard
 namespace: kube-system
spec:
 ports:
   - port: 443
     targetPort: 8443
 selector:
   k8s-app: kubernetes-dashboard

 三、Helm应用包管理工具安装

安装helm

#下载安装脚本
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
curl www.google.com
vim /etc/profile
source /etc/profile
./get_helm.sh

注意:helm 需要通过api server连接tiller,请保证代理设置绕过API server的IP
export no_proxy=”master_ip”

在kubernetes中建立tiller账户并绑定权限

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
helm init --service-account tiller
helm list
helm search mysql

Happy Helm!!

作者:  贾捷(1992-)
硕士,美国纽约大学,中国联通研究院工程师  
方向:容器平台研究、java开发工作
联系方式:jiaj12@chinaunicom.cn

Logo

开源、云原生的融合云平台

更多推荐