安装前需要准备工作:

1、虚拟机工具VirtualBox
2、系统镜像文件CentOS 7
3、安装好虚拟机2-3台

本次教程使用的是三台虚拟机:

192.168.4.13 k8s-master
192.168.4.14 k8s-node1
192.168.4.15 k8s-node2

开始整个安装过程

一、三台虚拟机 全部需要进行的操作如下
1、设置主机名 (主要是查看node信息 等 时显示的名称就是该名称)

`hostnamectl set-hostname k8s-master` #k8s-master是设置名称 三台设备分别是k8s-master k8s-node1 k8s-node2*

2、修改host文件 (此项可以只在Master上面进行设置即可)

[root@k8s-master k8s]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.13 k8s-master
192.168.4.14 k8s-node1
192.168.4.15 k8s-node2
[root@k8s-master k8s]# 

3、关闭selinux

setenforce 0 #实时动态关闭

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #禁止重启后自动开启

4、关闭交换分区

swapoff -a #实时动态关闭
sed -i '/ swap / s/^/#/' /etc/fstab #禁止重启后自动开启

5、网络配置文件

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

#退出 按 Ctrl + D

modprobe br_netfilter  #执行该命令 如果不执行就会在应用k8s.conf时出现加载错误

sysctl -p /etc/sysctl.d/k8s.conf #应用配置文件

6、配置资源地址

yum install wget -y  #安装wget命令行

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  #配置yum源

yum makecache #更新缓存

yum install -y yum-utils device-mapper-persistent-data lvm2 #安装yum扩展工具

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #配置docker下载的地址

7、安装Docker

yum list docker-ce --showduplicates|sort -r  #展示版本列表

yum install –y docker-ce  #默认安装最新版,也可以指定版本下载

systemctl start docker #启动docker
systemctl enable docker #将docker加入到开机启动

docker version #查看docker启动情况 和版本信息

8、配置k8s资源的下载地址

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

9、安装 kubelet kubeadm kubectl

yum install -y kubelet kubeadm kubectl

systemctl enable kubelet.service #开机启动

10、修改10-kubeadm.conf 文件

docker info | grep -i cgroup  #查看 Cgroup Driver: cgroupfs 有可能你的与这个不一样是System 这个地方决定 下面的cgroup-driver 值 一定要保证这两个地方相同

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf #编辑文件

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"

# 在编辑文件中添加上面内容  注意一定要保证-cgroup-driver=cgroupfs的值与docker哪里查询出来的一样

11、查看需要安装的k8s必须镜像与 安装镜像

kubeadm config images list #可以查看所需安装的镜像文件

kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/mirrorgooglecontainers#g' |sh -x 
docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#mirrorgooglecontainers#k8s.gcr.io#2' |sh -x 
docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ", $1":"$2}' |sh -x 
docker pull coredns/coredns:1.3.1
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker rmi coredns/coredns:1.3.1
 	#coredns 的版本号要与你查询所需安装镜像的版本号相同,我这里需要的是1.2.6

docker images #查看所有镜像是否都已经pull下来了

注意: 上面的部分是需要你的三台设备都需要进行的操作 ,如果实在想偷懒 其实你的node节点上面
2、3、5步骤可以省略,作者只简单测试了一下,没发现问题,如果你有问题了,可以再进行设置。
对于你如果是可以科学上网或者是国外的服务器的话,不需要进行6、8、11的操作,这部分主要是
因为国内无法访问到k8s的官方镜像,因为官方镜像地址在谷歌上面,国内无法访问。

二、开始初始化 (只在主节点Master上面 操作)

#只在Master的主机上面执行 版本信息与你要安装的相同

kubeadm init --kubernetes-version=v1.13.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.111 

#当出现 类似 如下说明 master 安装成功

kubeadm join --token 19f284.da47998c9abb01d3 192.168.1.111:6443
–discovery-token-ca-cert-hash sha256:0fd95a9bc67a7bf0ef42da968a0d55d92e52898ec37c971bd77ee501d845b538

#然后执行 安装成功提示的 命令行 这部分执行你安装成功后的部分 可能每个人的有所不同

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

三、节点node加入(默认此事上面一步骤 都进行了操作)

#执行master 安装成功后的 kubeadm join命令 注意是你自己的,下面是举例

kubeadm join --token 19f284.da47998c9abb01d3 192.168.1.111:6443 --discovery-token-ca-cert-hash sha256:0fd95a9bc67a7bf0ef42da968a0d55d92e52898ec37c971bd77ee501d845b538

四、主节点查看命令

#命令一

kubectl get cs #显示内容如下说明Master安装没问题
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"} 

#命令二

kubectl get pod -n kube-system #查看pod状态 下面只是部分pod内容
NAME                                   READY   STATUS             RESTARTS   AGE
coredns-86c58d9df4-j9g8d               1/1     Running            0          128m
coredns-86c58d9df4-pg45w               1/1     Running            0          128m
etcd-k8s1                              1/1     Running            0          127m
kube-apiserver-k8s1                    1/1     Running            0          127m
kube-controller-manager-k8s1           1/1     Running            0          127m

#在这里你可能发现你的coredns 的状态并不是Running 不要着急,后面还有个配置,配置好就自动Running了

#命令三

kubectl get node #查看节点状态 
NAME   STATUS   ROLES    AGE    VERSION
k8s1   Ready    master   131m   v1.13.1
k8s2   Ready    <none>   93m    v1.13.1
k8s3   Ready    <none>   93m    v1.13.1

#如果你添加了节点里面看的话 可能还未初始化,显示的是NoReady多等会儿。

五、安装Flannel 网络配置工具,用于配置第三层(网络层)网络结构 (只需要Master安装)

如果是国内 通过执行yml无法直接下载的话执行下面命令

docker pull registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64
docker tag registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker rmi registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64

#安装Flannel

mkdir -p ~/k8s/
cd k8s/
ll
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

#安装成功后查看pod

kubectl get pod -n kube-system
NAME                                   READY   STATUS             RESTARTS   AGE
coredns-86c58d9df4-j9g8d               1/1     Running            0          128m
coredns-86c58d9df4-pg45w               1/1     Running            0          128m
etcd-k8s1                              1/1     Running            0          127m
kube-apiserver-k8s1                    1/1     Running            0          127m
kube-controller-manager-k8s1           1/1     Running            0          127m
kube-flannel-ds-amd64-7btlw            1/1     Running            0          91m
kube-flannel-ds-amd64-9vq42            1/1     Running            0          106m
kube-flannel-ds-amd64-kdf42            1/1     Running            0          90m
kube-proxy-dtmfs                       1/1     Running            0          128m
kube-proxy-p76tc                       1/1     Running            0          90m
kube-proxy-xgw28                       1/1     Running            0          91m
kube-scheduler-k8s1                    1/1     Running            0          128m

#全部Running则表示 成功了

#如果发现哪一项的STATUS的状态不是Running,执行如下命令

kubectl describe pod  [这里是复制上面的Name列] -n kube-system 

#这里会看到具体的错误内容,然后根据提示进行解决。

六、Dashboard (只在master上即可)

安装kubernetes dashboard前,默认k8s已经安装成功!需要安装的可以转上一篇查看。
下面开始安装kubernetes dashboard:
1、在Master节点上面执行

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

2、查看dashboard Pod节点运行情况

 kubectl get pod -n kube-system

注意:如果kubernetes dashboard 已经是 Running的话,那就说明安装成功了。但一般情况下在不进行翻墙的状况下,都会是:
kubernetes-dashboard-57df4db6b-9qxn5 0/1 ErrImagePull 0 25s

3、使用命令查看问题

    kubectl describe pod kubernetes-dashboard-57df4db6b-9qxn5 -n kube-system

.... #此处省略其他信息主要看下面
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  41s                default-scheduler  Successfully assigned kube-system/kubernetes-dashboard-57df4db6b-9qxn5 to k8s2
  Warning  Failed     39s                kubelet, k8s2      Failed to pull image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     39s                kubelet, k8s2      Error: ErrImagePull
  Normal   BackOff    39s                kubelet, k8s2      Back-off pulling image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1"
  Warning  Failed     39s                kubelet, k8s2      Error: ImagePullBackOff
  Normal   Pulling    27s (x2 over 54s)  kubelet, k8s2      pulling image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1"

很明显错误原因是在K8s2上面无法获取镜像文件,那么既然我们无法从Google获取就是用docker直接拉取。
docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker rmi mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

注意:镜像的拉取一定是在查看错误里面的From 所在的节点,如果在你的Master上面进行镜像拉取或者其他节点的话,问题依然还是无法解决的。

4、回到Master节点 查看dashboard Pod 节点状态

 kubectl get pod -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-86c58d9df4-j9g8d               1/1     Running   0          7h24m
coredns-86c58d9df4-pg45w               1/1     Running   0          7h24m
etcd-k8s1                              1/1     Running   0          7h24m
kube-apiserver-k8s1                    1/1     Running   0          7h24m
kube-controller-manager-k8s1           1/1     Running   0          7h24m
kube-flannel-ds-amd64-7btlw            1/1     Running   0          6h47m
kube-flannel-ds-amd64-9vq42            1/1     Running   0          7h3m
kube-flannel-ds-amd64-kdf42            1/1     Running   0          6h47m
kube-proxy-dtmfs                       1/1     Running   0          7h24m
kube-proxy-p76tc                       1/1     Running   0          6h47m
kube-proxy-xgw28                       1/1     Running   0          6h47m
kube-scheduler-k8s1                    1/1     Running   0          7h24m
kubernetes-dashboard-57df4db6b-9qxn5   1/1     Running   0          27s

不出意外会启动成功了,如果依旧出现错误: 请先删除pod,然后重新创建(注意有可能创建的节点发生了变化,从k8s2变成了k8s3,所以还是需要手动拉取镜像)

kubectl delete pod kubernetes-dashboard-57df4db6b-9qxn5 -n kube-system #删除节点命令

5、访问kubernetes dashboard ,两种方式进行访问:
1、NodePort 方式访问
创建NodePort 方式访问可以两种方式:
①是将kubernetes-dashboard.yaml文件下载到本地(使用 wget 命令将上面第一条命令的连接下载文件)
然后在Service 中添加 type: NodePort
②不用下载文件 ,在dashboard搭建成功后 进行动态修改命令如下:

kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

查看可访问的接口

kubectl get svc -n kube-system
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP   7h26m
kubernetes-dashboard   NodePort    10.109.189.52   <none>        443:30346/TCP   6h37m

即访问地址为:https://192.168.4.13:30346
此处有坑:切忌 是HTTPS协议 你用HTTP访问是无法访问地,被此地坑惨了。
2、kubectl proxy 方式访问
访问地址:(没错这次是http协议不是https IP地址为master的IP地址)
http://192.168.4.13:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

如果你是在kubernetes dashboard的github上面看到 只需要执行kubectl proxy 就能访问 你可以尝试 一下,你能不能访问我不知道,我只知道这家伙坑惨我了,说啥也不能访问。
原因在于:

[root@k8s1 ~]# kubectl proxy 
[root@k8s1 ~]# Starting to serve on 127.0.0.1:8001 #原因在这个127.0.0.1 上面 ,外部访问是无法访问到这个地址的

#修改如下

[root@k8s1 ~]#  kubectl proxy --address=0.0.0.0
[root@k8s1 ~]# Starting to serve on [::]:8001

#这回应该可以了吧,访问地址 提示“Forbidden ” 啥意思 禁止访问 咋整继续修改命令

[root@k8s1 ~]# kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$'
[root@k8s1 ~]# Starting to serve on [::]:8001

#这会访问终于见到了自己想要的界面

6、登陆kubernetes dashboard 这里只介绍Token登陆方式
①使用默认的账号kubernetes-dashboard的Token登陆

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard | awk '{print $1}')

.... #此处省略
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1qeGQ3aCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjBlOTYxODk1LTBiMGYtMTFlOS1hOGZlLTA4MDAyNzk4MGYxNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.QeIQ4T3EikE9ZIWkv4lInxuQ-TZmJT6XBEBaNTsL-bKQ7XQENKESqo0VtUHEngtYYs4qf8Z_U2_0c5gOHiVrkak_OqSAbUW8UwI9DOXygDvjmZyYdkpVH5iF06TWCEjMISPC6m4d9_czcXkGVPMlICJs-5C1tuJgReT7v4sspW8OUTfBezC1KMbvpuPYGNoE1d9WCQmNo75XU0vV9ie0r_YFhd-0irqU45RzvXM7HDrzvdBJotNpxgp-lNRDuz0V5HHf8NYThKWocFSxbJlz3MorXU8bRuXUE2SSwXIR4lmCIWZw1IzGGzziWknbxEdBFSGVnUz5ZFFvU3vnW5Fqdw

#token就是登陆所需要的内容

但是这里填进去后登陆你会发现问题:

在这里插入图片描述

黄色啥意思…啥意思…
就是禁止访问的意思,别多想。
出现这个问题是因为账户权限不足,因为kubernetes使用了RBAC用户角色访问控制,如果你查看kubernetes-dashboard.yaml文件中创建的kubernetes-dashboard是RoleBinding而不是ClusterRoleBinding就知道问题所在了。
那咋办,凉拌二
②自己创建账号

[root@k8s-master k8s]# vim cluster-admin.yaml 

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
[root@k8s-master k8s]# 

将上面内容 保存到文件 cluster-admin.yaml中。

kubectl apply -f cluster-admin.yaml #创建成功后获取它的token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin | awk '{print $1}')

#用对应的token登陆 即可。出现如下界面表示安装成功
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐