目录

一、说明

二、安装Docker

1.上传

2.解压

3.移动

4.注册服务

5.启动

6.验证

三、K8s安装

1.各节点通用操作

1.1 上传安装源

1.2解压

1.3关闭selinux和防火墙

1.4 修改hosts文件

1.5配置系统路由参数

1.6关闭swap

1.7安装kubelet kubeadm kubectl包

1.8启用开机启动

1.9修改配置文件

1.10重启reload

2.master节点操作

2.1节点互信

2.2环境reset

2.3kubeadm 初始化

2.4配置下环境变量

2.5测试是否启动

2.6安装网络

2.7安装dashboard

2.8创建用户

四、加入node节点到集群

五、查看集群

六、遇到的问题



一、说明

本教程为内网安装,无法连接internet

安装包如下:

K8S docker 部署 使用docker部署k8s项目_docker

链接: https://pan.baidu.com/s/1BpadtQcDGHzKYY1zEbRLeQ 提取码: 649m

二、安装Docker

1.上传

rz -y,选择安装包

2.解压

tar -xvf docker-18.06.1-ce.tgz

3.移动

将解压出来的docker文件内容移动到 /usr/bin/ 目录下

cp docker/* /usr/bin/

4.注册服务

将docker注册为service

vim /etc/systemd/system/docker.service

复制下面的内容到docker.service

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

 

[Install]

WantedBy=multi-user.target

 

5.启动

chmod +x /etc/systemd/system/docker.service #添加文件权限

systemctl daemon-reload #重载unit配 置文件

systemctl start docker #启动Docker

systemctl enable docker.service #设置开机自启

6.验证

systemctl status docker #查看Docker状态

K8S docker 部署 使用docker部署k8s项目_docker_02

docker -v #查看Docker版本

K8S docker 部署 使用docker部署k8s项目_linux_03

docker的安装启动到这里就结束了,没遇到什么问题,所有节点都要安装docker。

三、K8s安装

1.各节点通用操作

1.1 上传安装源

rz -y 选择k8s-offline-install.zip

1.2解压

unzip k8s-offline-install.zip

解压之后里面有docker_images的压缩包,也要解压:

K8S docker 部署 使用docker部署k8s项目_hadoop_04

分卷压缩包在linux不好解压,可在window解压后,上传回去,解压之后有11个文件。

 

K8S docker 部署 使用docker部署k8s项目_docker_05

将上述镜像导入docker

(全部复制,粘贴到命令行回车即可)

docker load < /root/package/k8s-images/docker_images/etcd-amd64_v3.1.10.tar
docker load < /root/package/k8s-images/docker_images/flannel_v0.9.1-amd64.tar
docker load < /root/package/k8s-images/docker_images/k8s-dns-dnsmasq-nanny-amd64_v1.14.7.tar
docker load < /root/package/k8s-images/docker_images/k8s-dns-kube-dns-amd64_1.14.7.tar
docker load < /root/package/k8s-images/docker_images/k8s-dns-sidecar-amd64_1.14.7.tar
docker load < /root/package/k8s-images/docker_images/kube-apiserver-amd64_v1.9.0.tar
docker load < /root/package/k8s-images/docker_images/kube-controller-manager-amd64_v1.9.0.tar
docker load < /root/package/k8s-images/docker_images/kube-proxy-amd64_v1.9.0.tar
docker load < /root/package/k8s-images/docker_images/kubernetes-dashboard_v1.8.1.tar
docker load < /root/package/k8s-images/docker_images/kube-scheduler-amd64_v1.9.0.tar
docker load < /root/package/k8s-images/docker_images/pause-amd64_3.0.tar

1.3关闭selinux和防火墙

[root@hadoop04 ~]# setenforce 0
[root@hadoop04 ~]# sed -i  "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
[root@hadoop04 ~]# systemctl disable firewalld.service

[root@hadoop04 ~]# systemctl stop firewalld.service

1.4 修改hosts文件

使用本地解析主机名,给每个节点都起个名字

[root@hadoop04 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.20.11 master 
172.16.20.12 node1  
172.16.20.13 node2  

1.5配置系统路由参数

防止kubeadm报路由警告
[root@hadoop04 ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@hadoop04 ~]# sysctl --system

 

1.6关闭swap

[root@hadoop04 ~]# swapoff -a
# 注释掉带swap的行,你可以直接执行下面的命令,或者自己打开文件手动注释 vi /etc/fstab     
[root@hadoop04 ~]# sed -i 's/.*swap/#&/' /etc/fstab

1.7安装kubelet kubeadm kubectl包

就是安装装包中的rpm文件
[root@hadoop04 k8s-images]#rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm kubernetes-cni-0.6.0-0.x86_64.rpm  kubelet-1.9.9-9.x86_64.rpm kubectl-1.9.0-0.x86_64.rpm           kubectl-1.9.0-0.x86_64.rpm kubeadm-1.9.0-0.x86_64.rpm

1.8启用开机启动

此处仅需要enable
[root@hadoop04 k8s-images]# systemctl enable kubelet

1.9修改配置文件

设置cgroupkubelet默认的cgroup的driver和docker的不一样,docker默认的cgroupfs,kubelet默认为systemd

[root@hadoop04 k8s-images]# cp -a  /etc/systemd/system/kubelet.service.d/10-kubeadm.conf /etc/systemd/system/kubelet.service.d/10-kubeadm.conf_bak
[root@hadoop04 k8s-images]# sed -i "s/systemd/cgroupfs/g"  /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

1.10重启reload

[root@hadoop04 k8s-images]# systemctl daemon-reload

2.master节点操作

2.1节点互信

master节点与node节点做互相通信(ssh-copy-id的后面写二、2设置的,你要作为node的节点的名字)
[root@hadoop04 k8s-images]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q
[root@hadoop04 k8s-images]# ssh-copy-id node1
[root@hadoop04 k8s-images]# ssh-copy-id node2

2.2环境reset

[root@hadoop04 k8s-images]# kubeadm reset

2.3kubeadm 初始化

(注意:执行该命令后将出现的kubeadm join xxx保存下来,等下node节点需要使用)

[root@hadoop04 k8s-images]# kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16 

kubernetes默认支持多重网络插件如flannel、weave、calico,这里使用flanne,就必须要设置–pod-network-cidr参数,
10.244.0.0/16是kube-flannel.yml里面配置的默认网段,如果需要修改的话,
需要把kubeadm init的–pod-network-cidr参数和后面的kube-flannel.yml里面修改成一样的网段就可以了。(一般不需要修改)

2.4配置下环境变量

对于root用户:
[root@hadoop04 k8s-images]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@hadoop04 k8s-images]# source ~/.bash_profile

对于非root用户:(非root用户的操作没试过)
[root@hadoop04 k8s-images]# mkdir -p $HOME/.kube
[root@hadoop04 k8s-images]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@hadoop04 k8s-images]# chown $(id -u):$(id -g) $HOME/.kube/config

2.5测试是否启动

[root@hadoop04 k8s-images]# kubectl version

K8S docker 部署 使用docker部署k8s项目_hadoop_06

2.6安装网络

可以使用flannel、calico、weave、macvlan这里我们用flannel(这个yaml文件是压缩包里带的)

[root@hadoop04 k8s-images]# kubectl create  -f kube-flannel.yml

2.7安装dashboard

(这个yaml文件是压缩包里带的,这里要注意步骤否则有问题)

找到gcr.io/google_containers/kubernetes-dashboard-amd64:v1.8.1
修改kubernetes-dashboard.yaml,做如下修改:
image: image: reg.qiniu.com/k8s/kubernetes-dashboard-amd64:v1.8.3 
改为
image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.8.1

#执行kubernetes-dashboard

[root@hadoop04 k8s-images]# kubectl apply -f kubernetes-dashboard.yaml

#查看部署状态,如果不修改kubernetes-dashboard.yaml,直接执行kubernetes-dashboard,下面的STATUS是ImagePullBackOff 我是通过这个网址解决的问题https://www.jianshu.com/p/7159ef208c47

[root@hadoop04 k8s-images]# kubectl get pods --all-namespaces

NAMESPACE     NAME                                      READY     STATUS    RESTARTS   AGE
kube-system   kubernetes-dashboard-7d5dcdb6d9-mf6l2     1/1       Running   0          9m

2.8创建用户

创建服务账号,首先创建一个叫admin-user的服务账号,并放在kube-system名称空间下:

[root@hadoop04 k8s-images]# kubectl create -f admin-user.yaml

绑定角色,默认情况下,kubeadm创建集群时已经创建了admin角色,我们直接绑定即可:

[root@hadoop04 k8s-images]# kubectl create -f  admin-user-role-binding.yaml

获取Token,现在我们需要找到新创建的用户的Token,以便用来登录dashboard:

[root@hadoop04 k8s-images]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

输出类似:
Name:         admin-user-token-qrj82
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=admin-user
              kubernetes.io/service-account.uid=6cd60673-4d13-11e8-a548-00155d000529

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXFyajgyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2Y2Q2MDY3My00ZDEzLTExZTgtYTU0OC0wMDE1NWQwMDA1MjkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.C5mjsa2uqJwjscWQ9x4mEsWALUTJu3OSfLYecqpS1niYXxp328mgx0t-QY8A7GQvAr5fWoIhhC_NOHkSkn2ubn0U22VGh2msU6zAbz9sZZ7BMXG4DLMq3AaXTXY8LzS3PQyEOCaLieyEDe-tuTZz4pbqoZQJ6V6zaKJtE9u6-zMBC2_iFujBwhBViaAP9KBbE5WfREEc0SQR9siN8W8gLSc8ZL4snndv527Pe9SxojpDGw6qP_8R-i51bP2nZGlpPadEPXj-lQqz4g5pgGziQqnsInSMpctJmHbfAh7s9lIMoBFW7GVE8AQNSoLHuuevbLArJ7sHriQtDB76_j4fmA
ca.crt:     1025 bytes
namespace:  11 bytes

这里的token是登陆dashboard的web网页需要的码

用firefox访问https://172.x.x.x:32666 ,选择令牌登录,输入token

注意:一定要是https不然访问不了。这个问题我是通过这个网址解决的:https://github.com/kubernetes/dashboard/issues/3460

K8S docker 部署 使用docker部署k8s项目_hadoop_07

四、加入node节点到集群

使用刚刚执行kubeadm后的kubeadm join –xxx(注意,执行你自己的,别执行这里的,这只是个例子)
[root@hadoop03 ~]# kubeadm join --token 361c68.fbafaa96a5381651 master:6443 --discovery-token-ca-cert-hash sha256:e5e392f4ce66117635431f76512d96824b88816dfdf0178dc497972cf8631a98

五、查看集群

在master节,查看节点
[root@hadoop04 k8s-images]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    3h        v1.9.0
node1     Ready     <none>    3h        v1.9.0
node2     Ready     <none>    3h        v1.9.0

查看服务
[root@hadoop04 k8s-images]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE
kube-system   etcd-hadoop04                           1/1       Running   0          1d
kube-system   kube-apiserver-hadoop04                 1/1       Running   0          1d
kube-system   kube-controller-manager-hadoop04        1/1       Running   0          1d
kube-system   kube-dns-6f4fd4bdf-2sll4                3/3       Running   0          1d
kube-system   kube-flannel-ds-4xp4v                   1/1       Running   0          1d
kube-system   kube-flannel-ds-8wfw4                   1/1       Running   0          23h
kube-system   kube-proxy-7gzw9                        1/1       Running   0          1d
kube-system   kube-proxy-phnm8                        1/1       Running   0          23h
kube-system   kube-scheduler-hadoop04                 1/1       Running   0          1d
kube-system   kubernetes-dashboard-7b7b5cd79b-ctz85   1/1       Running   0          23h

在集群配置时,默认会生成kubernetes-admin这个用户及相关公私钥和证书,证书信息保存在master节点的配置文件/etc/kubernetes/admin.conf中

kubectl config的配置信息中需要三个证书信息,都可以在admin.conf中找到

certificate-authority-data
client-certificate-data
client-key-data

六、遇到的问题

1.node节点无法加入集群,一直报错connection refused

发现node节点无法ping通master节点,报错如下,暂时无法解决,只好换个主节点。

K8S docker 部署 使用docker部署k8s项目_docker_08

2.主节点执行kubeadm init等待巨长时间后,报错

测试kubectl version也说connection refused,解决方式还是换个主节点,哈哈,我也是小白,暂时没查到原因,20个结点,应该够我换的。