K8s与DashBoard安装

[TOC]

一、安装先决条件和集群规划

1.1 环境配置

以下操作在所有节点执行

  • 关闭防火墙:
 systemctl stop firewalld
 systemctl disable firewalld

  • 禁用SELinux ,让容器可以读取主机文件系统:

 setenforce 0
 sed -i 's/enforcing/disabled/' /etc/selinux/config

  • 校正时间:
 date
 
  • 安装ntp
yum install -y ntp
  • 同步时间
ntpdate cn.pool.ntp.org
  • 关闭swap K8S中不支持swap分区
swapoff -a

vim /etc/fstab
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

1.2 集群规划

  • docker 版本: 19.03.5
  • kubelet 版本: V1.16.3
  • kubeadm 版本: v1.16.3
角色 主机名 IP 地址 配置信息
Master k8s-master 192.168.92.10 2核4G内存
Node k8s-slave01 192.168.92.11 2核4G内存
Node k8s-slave02 192.168.92.12 2核4G内存

以下操作在所有节点执行
更改hosts文件添加主机名与IP映射关系

vim /etc/hosts

192.168.92.10 k8s-master
192.169.92.11 k8s-slave01
192.168.92.12 k8s-slave02

将桥接的IPV4流量传递到iptables的链

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
net.ipv4.ip_forward= 1
EOF

载入配置:

sysctl --system

允许自动登录:

sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config

二、安装Docker

以下操作在所有节点执行

1.卸载旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

2.安装并运行Docker[使用存储库进行安装]

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

3.设置稳定的存储库。

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

4. 安装docker

sudo yum install docker-ce
sudo systemctl start docker
sudo systemctl enable docker

5.检查安装结果

# docker info

出现如下信息,则docker安装成功

Kernel Version: 3.10.0-693.17.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 1
Total Memory: 1.359 GiB
Name: localhost.localdomain
ID: KE6P:FAHI:ZYWT:AUWU:NVFG:6JRF:33ZS:AT4X:63QZ:ICYW:PUTO:V4ZB
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Registries: docker.io (secure)

三、安装kubeadm工具

以下操作所有节点进行

1.添加kerbernets镜像文件信息

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.安装kubeadm工具

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

2.设置开机自启动

systemctl enable kubelet && systemctl start kubelet

3.查看kubeadm、kubelet版本

 kubelet --version

 kubeadm version

三、安装master节点

以下步骤在主节点进行

1.初始化配置安装参数

kubeadm config print init-defaults > init.default.yaml

初始化结果如下:

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 1.2.3.4
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: localhost.localdomain
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}

2.下载kubernetes相关镜像

添加docker镜像仓库信息:


 echo '{"registry-mirrors":["https://registry.docker-cn.com"]}' > /etc/docker/daemon.json
 
 cat /etc/docker/daemon.json

重启docker容器

systemctl restart docker

修改初始化打印文件名为:init-config.yaml

mv init-default.yaml intit-config.yaml

修改init-config.yaml 文件,修改镜像地址信息:

imageRepository: registry.aliyuncs.com/google_containers

删除无用信息,最终配置文件如下,如多配置,会导致Master节点安装失败:


apiVersion: kubeadm.k8s.io/v1beta2
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
networking:
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16

根据初始化的参数文件进行相关镜像下载:

kubeadm config images pull --config=init-config.yaml

根据下载的镜像安装Master

kubeeadm init --config=init-config.yaml

安装成功后会有如下类似提示:

Your Kubernetes control-plane 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 at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.92.10:6443 --token 4nmcwj.ebrnxqyks0rmkgki \
    --discovery-token-ca-cert-hash sha256:3d246361bc34b33cd7c60eb6a19e74a13842a4a810128b890c0f06c23065a28a

按提示操作:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

此时查看雁阵kubeadm-config 的ConfigMap对象:

kubectl get -n kube-system configmap

查看安装状态:


[root@k8s-master k8s]# kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   NotReady   master   17m   v1.16.3

四、安装CNI网络通信插件

1.安装CNI插件

此处采用kube-flannel

mkdir flannel && cd flannel
wget  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubekubectl apply -f kube-flannel.yml

flannel支持的模式:

flannel支持多种模型
     VxLAN  #vxLAN有以下两种模式
          (1) vxlan  #叠加网络或者隧道网络,通过封装网络报文的方式使不同网段的pod之间可以通讯
          (2) Directrouting #直接使用主机的IP地作为网关,通过主机路由的方式与目标pod进行通讯,当目标pod与当前pod不在同一三层网络内,会自动降级为VxLAN模式
    host-gw: Host GateWay #与VxLAN的Directrouting模式相同,当目标pod与当前pod不在同一三层网络内时,pod之间无法通讯
    UDP: #早期由于Linux内核不支持VxLAN,host-gw又有非常高的入门门槛,udp是flannel最早期使用的模式,由于使用普通的udp报文通讯,性能非常差,在可以使用前面两种模式的情况下请勿使用该模式 

如安装不成功,手动下载镜像并修改镜像名为yml镜像名:

docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64

查看集群状态:


[root@k8s-master flannel]# kubectl get nodes
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   5m43s   v1.16.3

TIPS:

  • 如果master安装失败,执行
kubeadm reset   #重置主机,之后重新执行kubeadm init再次安装
  • 如果 Pod 错误,需要执行如下命令查看Pod错误信息
kubectl --namespace=kube-system describe pod <pod_name>

五、node节点加入集群

先决条件: 已经安装kubelet kubeadm

1.创建节点加入配置文件 join-config.yaml

vim /home/k8s/join-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: JoinConfiguration
discovery:
  bootstrapToken:
    apiServerEndpoint: 192.168.92.10:6443
    token: 4nmcwj.ebrnxqyks0rmkgki
    unsafeSkipCAVerification: true
  tlsBootstrapToken: 4nmcwj.ebrnxqyks0rmkgki

其中 token 和 tlsBootstrapToken 来自Master安装后的提示末尾信息, 如果忘记了token信息和证书信息可使用以下命令查询:

  • 查询token信息
kubeadm token list 

token 24小时失效
可使用如下命令重新创建

kubeadm token create
  • 查询ca证书hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

2.node节点加入集群

以下操作适用于node1和node2

kubeadm join --config=join-config.yaml

节点加入成功会有如下信息:


[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
        [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.5. Latest validated version: 18.09
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.16" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.


如果节点加入超时,请执行如下命令:

swapoff -a
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet

并手动在node节点下载flannel镜像:

docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64

剔除节点并重新加入

节点剔除:
【master执行】

kubectl drain k8s-slave2 --delete-local-data --ignore-daemonsets

kubectl delete node k8s-slave2

node退出节点执行:

kubeadm reset

六、常用命令:

1.查看所加入节点


[root@k8s-master kubernetes]# kubectl get nodes
NAME         STATUS   ROLES    AGE    VERSION
k8s-master   Ready    master   101m   v1.16.3
k8s-slave1   Ready    <none>   41s    v1.16.3
k8s-slave2   Ready    <none>   11m    v1.16.3

2.查看所有Pod命令

kubectl get pod --all-namespaces

七、安装k8s dashboard

  • dashboard版本:V2.0.0.0-beta8
  • metrics Scaraper版本: v1.0.1

1.下载yaml文件

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

如果无法下载请下载离线安装yaml文件,由于文件和镜像被墙,请采用笔者分享的最新的镜像版本手动下载后导入镜像

dashboard下载资源

2.下载dashboard镜像

由于dashboard镜像无法在国内下载,需要手动下载镜像到node1和node2,请手动导入镜像到node1和node2到docker镜像中

  • 导入镜像命令:
docker load< dashboard-2.0.0-beata.tar
docker load< metrics-scraper-1.0.0.1.tar

  • 修改导入的镜像名称
docker tag  xxxx kubernetesui/dashboard:v2.0.0-beta8   ## xxx为你刚才导入的镜像ID
docker tag xxxx kubernetesui/metrics-scraper:v1.0.1

3.安装dashboard

环境准备工作做好后,检查下节点状态OK后进行dashboard安装,以上操作如果你可以直接下载资源,可不用手动下载配置文件和镜像资源,直接开始安装

  • 安装dashboard [主节点进行]
kubectl apply -f recommended.yaml

等待安装完成,值的说明的是,需要创建一个管理员账号和角色方可登录dashboard系统,因此创建角色和账号,新的dashboard采用了新的命名空间,与kube-system命名空间进行了分离,需要注意此处内容

  • 查看dashboard-adminuser.yaml,注意nameSpace

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: admin-user
    namespace: kubernetes-dashboard

执行角色创建

kubectl apply -f dashboard-adminuser.yaml

查看密钥创建信息

kubectl get secret -n kubernetes-dashboard

用户和角色创建后,我们需要创建https证书便于浏览器查看系统

  • 生成client-certificate-data
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
  • 生成client-key-data
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
  • 生成p12,不要随便输入,要用此密码在浏览器导入证书
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

生成后将有以下文件信息:

将kubecfg.p12文件下载到电脑卓明,点击chrome浏览器设置,点击高级,点击证书管理,
点击导入


QNCJZd.png

选择文件,输入刚才生成证书的密码,候选选择默认,最终会提示完成,点击退出,重启浏览器


QNCwz8.png

完成后我们需要看下dashboard 的pod是否正常,查看一下所有pod信息


[root@k8s-master dashboard]# kubectl get pods --all-namespaces
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
kube-system            coredns-58cc8c89f4-8tfwv                     1/1     Running   3          4h14m
kube-system            coredns-58cc8c89f4-tnt4l                     1/1     Running   4          4h14m
kube-system            etcd-k8s-master                              1/1     Running   4          4h13m
kube-system            kube-apiserver-k8s-master                    1/1     Running   4          4h13m
kube-system            kube-controller-manager-k8s-master           1/1     Running   5          4h13m
kube-system            kube-flannel-ds-amd64-5ddlb                  1/1     Running   5          4h9m
kube-system            kube-flannel-ds-amd64-svdt4                  1/1     Running   2          4h5m
kube-system            kube-flannel-ds-amd64-wcd9f                  1/1     Running   2          4h3m
kube-system            kube-proxy-cq724                             1/1     Running   1          4h5m
kube-system            kube-proxy-l52m7                             1/1     Running   3          4h14m
kube-system            kube-proxy-zzs5c                             1/1     Running   1          4h3m
kube-system            kube-scheduler-k8s-master                    1/1     Running   4          4h13m
kubernetes-dashboard   dashboard-metrics-scraper-76585494d8-txftz   1/1     Running   2          3h11m
kubernetes-dashboard   kubernetes-dashboard-7bb44758b6-kbgqs        1/1     Running   1          3h11m

可以清楚的看到,dashboard是在Runing状态,且在kubernetes-dashboard命名空间内,然后查看一下具体的运行状态细信息

kubectl describe -n kubernetes-dashboard pod kubernetes-dashboard-7bb44758b6-kbgqs

如果提示启动容器成功等消息,证明我们的dashboard是没有问题的

  • 查看代理节点信息

[root@k8s-master dashboard]#  kubectl cluster-info
Kubernetes master is running at https://192.168.92.10:6443
KubeDNS is running at https://192.168.92.10:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump

4.访问dashboard

浏览器输入代理地址信息:

https://192.168.92.10:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

上述IP为你Master节点的信息,端口来源于代理节点信息查询结果,请根据自己部署的IP进行查看系统。

输入后首先需要确认证书,点击同意,之后打开了登录界面,选择 token

  • master节点查询tokne
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin  | awk '{print $1}')

以上命令注意查询的命名空间,避免查错管理员token而导致进入后提示部分模块无法查询,缺少权限等。
输入token后就可以看到k8s dashboard面板了


dashboard

5.安装失败后的一些处理方法

如果安装失败可以删除dashboard和角色重新安装

  • 删除dashboard
kubectl delete -f recommended.yaml

  • 删除角色信息
kubelct delete -f dashboard-adminuser.yaml

本文由博客一文多发平台 OpenWrite 发布!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容