Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)


安装之前的准备:

安装docker

使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh 

直接从dockerhub下载镜像太慢, 需要配置国内镜像源, 修改daemon.json文件
添加镜像源, luffy使用的是中科大的镜像源

cat <<EOF >/etc/docker/daemon.json {   "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"] }   EOF 

启动docker

sudo systemctl daemon-reload sudo systemctl restart docker 

安装kubelet,kubectl,kubeadm:

打开apt源文件:

vim /etc/apt/sources.list 

添加如下:

deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main 

然后更新apt源:

apt-get update 

ps:如果出现下面错误
W: GPG error: https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB

执行安装GPG秘钥:

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg |sudo apt-key add - 

在进行

apt-get update 

安装kube:

apt-get install -y kubelet=1.18.0-00 kubeadm=1.18.0-00 kubectl=1.18.0-00 

启动master节点

查看镜像列表

kubeadm config images list --kubernetes-version v1.18.0 

拉取镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 

给镜像改名:

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7 

注意:以上三步关于镜像的操作也可以直接写到一个脚本里,for循环来执行,详情可以查询脚本操作。

vim k8s-pull.sh 

添加内容:

#将对应的包, 从国内镜像上拉下来 for  i  in  `kubeadm config images list --kubernetes-version v1.18.0`;  do     imageName=${i#k8s.gcr.io/}     docker pull registry.aliyuncs.com/google_containers/$imageName     docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName     docker rmi registry.aliyuncs.com/google_containers/$imageName done; 

执行脚本

sh k8s-pull.sh 

镜像下载完成,可以启动master节点了:

kubeadm init --kubernetes-version=v1.18.0 --pod-network-cidr=10.10.0.0/16 --apiserver-advertise-address=172.18.10.172 --ignore-preflight-errors=NumCPU 

注意172.18.10.172是我的服务器内网地址,注意替换,--ignore-preflight-errors=NumCPU 是因为我的服务器是买的低配单核,加上就忽略启动是的cpu核心数报错,多核 的不用加这个

设置配置文件如下:

mkdir -p /root/.kube cp -i /etc/kubernetes/admin.conf /root/.kube/config chown root:root /root/.kube/config 

设置网络插件

export KUBECONFIG=/etc/kubernetes/admin.conf kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 
mkdir -p /etc/cni/net.d 

编辑网络通道配置列表(没有会默认创建)

vi 10-flannel.conflist 
{     undefined"name": "cbr0",     "plugins": [         {             undefined"type": "flannel",             "delegate": {                 undefined"hairpinMode": true,                 "isDefaultGateway": true             }         },         {             undefined"type": "portmap",             "capabilities": {                 undefined"portMappings": true             }         }     ] } 

多次刷新查看是否relay

kubectl get nodes 

显示Ready表示执行成功

NAME                      STATUS   ROLES    AGE   VERSION izwz91w9jegcgf28ttbe2yz   Ready    master   46h   v1.18.0 

重启kubelet

systemctl daemon-reload systemctl restart kubelet 

安装 kubernetes-dashboard

下载包

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 

可以修改下名字kubernetes-dashboard,编辑配置文件

vim kubernetes-dashboard.yaml 

下面我这个已经修改好了没有坑,注意下端口就行

# 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.  apiVersion: v1 kind: Namespace metadata:   name: kubernetes-dashboard  ---  apiVersion: v1 kind: ServiceAccount metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard   namespace: kubernetes-dashboard  ---  kind: Service apiVersion: v1 metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard   namespace: kubernetes-dashboard spec:   type: NodePort # 新增   ports:     - port: 443       targetPort: 8443       nodePort: 30443 # 新增   selector:     k8s-app: kubernetes-dashboard  ---  apiVersion: v1 kind: Secret metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard-certs   namespace: kubernetes-dashboard type: Opaque  ---  apiVersion: v1 kind: Secret metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard-csrf   namespace: kubernetes-dashboard type: Opaque data:   csrf: ""  ---  apiVersion: v1 kind: Secret metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard-key-holder   namespace: kubernetes-dashboard type: Opaque  ---  kind: ConfigMap apiVersion: v1 metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard-settings   namespace: kubernetes-dashboard  ---  kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard   namespace: kubernetes-dashboard rules:   # Allow Dashboard to get, update and delete Dashboard exclusive secrets.   - apiGroups: [""]     resources: ["secrets"]     resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]     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.   - apiGroups: [""]     resources: ["services"]     resourceNames: ["heapster", "dashboard-metrics-scraper"]     verbs: ["proxy"]   - apiGroups: [""]     resources: ["services/proxy"]     resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]     verbs: ["get"]  ---  kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard rules:   # Allow Metrics Scraper to get metrics from the Metrics server   - apiGroups: ["metrics.k8s.io"]     resources: ["pods", "nodes"]     verbs: ["get", "list", "watch"]  ---  apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard   namespace: kubernetes-dashboard roleRef:   apiGroup: rbac.authorization.k8s.io   kind: Role   name: kubernetes-dashboard subjects:   - kind: ServiceAccount     name: kubernetes-dashboard     namespace: kubernetes-dashboard  ---  apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:   name: kubernetes-dashboard roleRef:   apiGroup: rbac.authorization.k8s.io   kind: ClusterRole   name: kubernetes-dashboard subjects:   - kind: ServiceAccount     name: kubernetes-dashboard     namespace: kubernetes-dashboard  ---  kind: Deployment apiVersion: apps/v1 metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard   namespace: kubernetes-dashboard spec:   replicas: 1   revisionHistoryLimit: 10   selector:     matchLabels:       k8s-app: kubernetes-dashboard   template:     metadata:       labels:         k8s-app: kubernetes-dashboard     spec:       containers:         - name: kubernetes-dashboard           image: kubernetesui/dashboard:v2.0.0           imagePullPolicy: Always           ports:             - containerPort: 8443               protocol: TCP           args:             - --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             # 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           securityContext:             allowPrivilegeEscalation: false             readOnlyRootFilesystem: true             runAsUser: 1001             runAsGroup: 2001       volumes:         - name: kubernetes-dashboard-certs           secret:             secretName: kubernetes-dashboard-certs         - name: tmp-volume           emptyDir: {}       serviceAccountName: kubernetes-dashboard       nodeSelector:         "kubernetes.io/os": linux       # Comment the following tolerations if Dashboard must not be deployed on master       tolerations:         - key: node-role.kubernetes.io/master           effect: NoSchedule  ---  kind: Service apiVersion: v1 metadata:   labels:     k8s-app: dashboard-metrics-scraper   name: dashboard-metrics-scraper   namespace: kubernetes-dashboard spec:   ports:     - port: 8000       targetPort: 8000   selector:     k8s-app: dashboard-metrics-scraper  ---  kind: Deployment apiVersion: apps/v1 metadata:   labels:     k8s-app: dashboard-metrics-scraper   name: dashboard-metrics-scraper   namespace: kubernetes-dashboard spec:   replicas: 1   revisionHistoryLimit: 10   selector:     matchLabels:       k8s-app: dashboard-metrics-scraper   template:     metadata:       labels:         k8s-app: dashboard-metrics-scraper       annotations:         seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'     spec:       containers:         - name: dashboard-metrics-scraper           image: kubernetesui/metrics-scraper:v1.0.4           ports:             - containerPort: 8000               protocol: TCP           livenessProbe:             httpGet:               scheme: HTTP               path: /               port: 8000             initialDelaySeconds: 30             timeoutSeconds: 30           volumeMounts:           - mountPath: /tmp             name: tmp-volume           securityContext:             allowPrivilegeEscalation: false             readOnlyRootFilesystem: true             runAsUser: 1001             runAsGroup: 2001       serviceAccountName: kubernetes-dashboard       nodeSelector:         "kubernetes.io/os": linux       # Comment the following tolerations if Dashboard must not be deployed on master       tolerations:         - key: node-role.kubernetes.io/master           effect: NoSchedule       volumes:         - name: tmp-volume           emptyDir: {}  

更新dashboard配置

kubectl apply -f kubernetes-dashboard.yaml 

查看dashboard端口

kubectl get pod,deploy,svc --all-namespaces 

返回下面数据都显示running:表示成功
在这里插入图片描述
Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)

登录dashboard

此时通过 https://服务器外网ip:30443
可以访问dashboard页面
Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)

生成登陆须要的token:

1:建立service account

kubectl create sa dashboard-admin -n kube-system 

2:建立角色绑定关系

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin 

3:查看dashboard-admin的secret名字

ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}') echo ADMIN_SECRET 

4:打印secret的token

kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}' 

Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)

Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)

备注:有什么问题可以查看日志,排查

journalctl -xeu kubelet 
发表评论

相关文章