使用离线包部署kubernetes 1.9.0、kubernetes-dashboard 1.8
===============================================
2018/3/22_第2次修改 ccb_warlock
更新说明:
2018/3/22:修改了6.7中k8s-dashboard中url错误的问题;
===============================================
为了让产品在迎来业务量爆发式增长前完成应对措施,在浏览无数的资料后,决定将服务逐渐进行容器化,最终能达到容器集群的效果。而容器集群的解决方案中,kubernetes(简称k8s)看起来是个可行的方案。我目前的理解是,k8s就是docker容器集群的一个管理系统,有很多实用功能能提高开发、运维的效率。
尝试过使用在线部署的方式,当时记得即使配了代理有些资源仍然拉不下来,纠结了一天最后查找到了离线部署的教程(https://segmentfault.com/a/1190000012755243),这篇教程基本可以部署出可用的k8s。
本篇的部署内容和这个教程大体相同,我只是根据我部署的过程增补了一些描述和图片、修改了原教程中一些存在问题的内容。
| 节点配置信息表 | |||||
| 节点 | 主机名 | IP | OS | CPU核数 | 内存大小 |
| Master | K8s-master | 192.168.12.21 | centos 7 | 4 | 4G |
| Node1 | K8s-node-1 | 192.168.12.22 | centos 7 | 4 | 4G |
| Node2 | K8s-node-2 | 192.168.12.23 | centos 7 | 4 | 4G |
一、基础设置
1.1 安装vim
yum install -y vim
1.2 设置主机名
Master上执行:
hostnamectl --static set-hostname k8s-master
Node1上执行:
hostnamectl --static set-hostname k8s-node-1
Node2上执行:
hostnamectl --static set-hostname k8s-node-2
# 重启
reboot
1.3 分别修改三个节点的hosts文件,并使内容保持一致
# 编辑hosts文件
vim /etc/hosts
# 新增下面的内容,wq保存。
192.168.12.21 k8s-master
192.168.12.22 k8s-node-1
192.168.12.23 k8s-node-2
1.4 关闭防火墙
这里为了部署方便,我跟原教程一样直接关了防火墙。
systemctl stop firewalld
systemctl disable firewalld
1.5 关闭selinux
为了允许容器访问主机文件系统,这是pod网络所需的。目前必须这样做,直到在kubelet中改进SELinux支持。
# 编辑config文件
vim /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled,wq保存。
# 当前临时关闭selinux(不重启临时关闭selinux的方式)
setenforce 0
1.6 关闭swap
试验下来k8s需要关闭虚拟内存。
# 当前临时关闭虚拟内存
swapoff -a
# 修改/etc/fstab文件
vim /etc/fstab
# 加#注释掉下面的语句屏蔽SWAP的自动挂载,wq保存
#/dev/mapper/centos-swap swapswapdefaults0 0
# 查看内存使用情况
free -m

1.7 配置路由参数,防止kubeadm报路由警告
CentOS 7上的某些用户报告了由于iptables被绕过而导致流量被错误路由的问题。你应该确保net.bridge.bridge-nf-call-iptables在你的sysctl配置中设置为1。试验下来即使是firewalld的也要修改配置。
# 将内容写入k8s.conf文件
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 立即生效
sysctl --system
1.8 获取离线包
离线包链接:https://pan.baidu.com/s/1eTWTXSI
密码:6uma
(教程里作者提供的文件中有个文件名和其教程的命令不一致,我修改该文件名后重新打包)
将k8s_images.tar.bz2上传到/root下。
# 安装 bzip2
yum install -y bzip2
# 解压k8s_images.tar.bz2
tar -xjvf k8s_images.tar.bz2
二、部署docker
选择安装docker1.2,因为官方建议的版本。1.11、1.13和17.03版本也可以。17.06+版本可能有效,但未经过Kubernetes团队的测试。
2.1 安装
yum install -y docker
2.2 启动
systemctl start docker
systemctl enable docker
2.3 查看版本
docker version
2.4 设置镜像加速器
墙的缘故,访问docker hub不够稳定,故需要设置镜像加速器来解决这个问题。
这里我使用的是阿里云的镜像加速器。登录阿里云后,访问https://cr.console.aliyun.com/#/accelerator

ps:registry-mirrors的值必须带https:// (有段时间阿里云的教程中只有域名),否则会出现docker重启报错的情况。
2.5 查看docker文件驱动
docker info
这里我们主要是看cgroup driver。因为K8S要求cgroup driver与docker的保持一致。yum方式部署的应该是1.12.6,其Cgroup Driver为systemd。

三、分别在三个节点上部署kubeadm、kubelet、kubectl
3.1 导入镜像
docker load </root/k8s_images/docker_images/etcd-amd64_v3.1.10.tar
docker load </root/k8s_images/docker_images/flannel_v0.9.1-amd64.tar
docker load </root/k8s_images/docker_images/k8s-dns-dnsmasq-nanny-amd64_v1.14.7.tar
docker load </root/k8s_images/docker_images/k8s-dns-kube-dns-amd64_1.14.7.tar
docker load </root/k8s_images/docker_images/k8s-dns-sidecar-amd64_1.14.7.tar
docker load </root/k8s_images/docker_images/kube-apiserver-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/kube-controller-manager-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/kube-scheduler-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/kube-proxy-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/pause-amd64_3.0.tar
docker load </root/k8s_images/kubernetes-dashboard_v1.8.1.tar
3.2 安装
cd /root/k8s_images
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm
rpm -ivh kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubeadm-1.9.0-0.x86_64.rpm
3.3 修改kubelet的配置文件
kubelet默认的cgroup-driver和docker的不一样,docker有的版本可能是cgroupfs,kubelet默认为systemd,如果不修改则会引起kubelet启动失败。
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 重新载入
systemctl daemon-reload
3.4 启动
systemctl enable kubelet && systemctl start kubelet
ps:此时用systemctl status查看会发现服务没有完全起来,这是因为还缺少许多文件在K8S初始化补齐后才能完全运行,所以我们继续部署。
四、部署master节点
4.1 初始化k8s
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
等待1分钟后,出现下面的内容。

如果长时间(等待的时间超过3分钟以上)始终停留在“[init] This might take a minute or longer if the control plane images have to be pulled.”,就要查看/var/log/message里的内容,是什么错误导致初始化失败。
排除错误后,先重置,再初始化。
# 初始化过程出现错误时,使用下面的命令重置
kubeadm reset
# 重置后再初始化
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
上图中的token信息要记得保留,等会node的加入需要使用。如果忘记了,可以在master上通过kubeadm token list得到。默认token在24小时后过期,后续的node要加入集群需要在master节点上用下面的命令重新生成token。
kubeadm token create
4.2 配置环境变量
此时root用户还不能使用kubelet控制集群,还需要配置该环境变量。
# 将信息写入bash_profile文件
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
# 立即生效
source ~/.bash_profile
4.3 查看版本
kubectl version

4.4 安装flannel
离线包有yml文件,所以直接用。
# 创建flannel
kubectl create -f kube-flannel.yml

五、部署node节点
# 使用4.1保存的“kubeadm join”的命令,分别将各个node节点加入master(token信息请根据你实际部署的修改掉,这里只是我部署时生成的内容)
kubeadm join --token 1ff84c.b7828d504656ba64 192.168.12.21:6443 --discovery-token-ca-cert-hash sha256:ceb2b93ce7543174b8fa87628fbe1f3926b5206915fee06629195ea8b4b89fe7

根据提示,到master节点上检查下,在master上运行下面的命令。
kubectl get nodes

# kubernetes会在每个node节点创建flannel和kube-proxy的pod

六、部署kubernetes-dashboard
虽然经过几天的学习常用的k8s命令已经能熟练使用了,但是有个页面能够显示信息总比自己一个个命令查询效率来的高,还好原教程的作者也将该页面的yaml文件保存在离线包里了。
由于k8s的工作负载都放在node节点上,所以等node部署完后才进行页面的部署。
6.1 修改配置文件
# 编辑kubernetes-dashboard.yaml
cd /root/k8s_images
vim kubernetes-dashboard.yaml
# 添加type: NodePort,暴露Dashboard服务。注意这里只添加行type: NodePort即可,其他配置不用改。
(我这里需要补个截图)
6.2 创建
kubectl create -f kubernetes-dashboard.yaml
6.3 设置端口
由于系统默认的有效端口为30000-32767,故需要修改kube-apiserver.yaml设置我们需要的端口范围。
# 修改kube-apiserver.yaml
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 添加下面的内容,wq保存。
- --service-node-port-range=1-65535
ps:-与--之间的不是空格

6.4 设置验证方式
默认验证方式有kubeconfig和token,这里都不用,我们使用basicauth的方式进行apiserver的验证。
# 创建/etc/kubernetes/pki/basic_auth_file, 用于存放用户名、密码、用户ID。
cat <<EOF > /etc/kubernetes/pki/basic_auth_file
admin,admin,2
EOF
# 编辑kube-apiserver.yaml,给kube-apiserver添加basic_auth验证
cd /etc/kubernetes/manifests
vim kube-apiserver.yaml
# 添加下面的内容,wq保存。
- --basic_auth_file=/etc/kubernetes/pki/basic_auth_file
ps:-与--之间的不是空格

6.5 更新apiserver
改完kube-apiserver.yaml后如果直接更新kube-apiserver容器,有时会报“The connection to the server 192.168.12.21:6443 was refused - did you specify the right host or port?”,试验后发现在更新之前还需要重启kubelet。
# 重启kubelet
systemctl restart kubelet
# 更新kube-apiserver容器
cd /etc/kubernetes/manifests
kubectl apply -f kube-apiserver.yaml
6.6 授权
k8s 1.6以后的版本都采用RBAC授权模型。
# 查看cluster-admin
kubectl get clusterrole/cluster-admin -o yaml

# 给admin授权。默认cluster-admin是拥有全部权限的,将admin和cluster-admin bind这样admin就有cluster-admin的权限。
kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin

# 查看
kubectl get clusterrolebinding/login-on-dashboard-with-cluster-admin -o yaml

6.7 登录
由于https证书的问题,暂时只能先通过火狐浏览器增加安全例外的方式访问https://192.168.12.21:32666(端口是6.1中kubernetes-dashboard.yaml文件原作者配置的32666,如果需要修改请在6.1中进行修改后再创建)
6.4中,我配置的用户名/密码为admin/admin,故使用该用户名密码登录。


参考资料:
1.https://segmentfault.com/a/1190000012755243
2.《kubernetes权威指南》
3.https://kubernetes.io/docs/setup/independent/install-kubeadm/
4.https://www.cnblogs.com/liuxuzzz/p/5324749.html
使用离线包部署kubernetes 1.9.0、kubernetes-dashboard 1.8的更多相关文章
- 二进制方式部署Kubernetes 1.6.0集群(开启TLS)
本节内容: Kubernetes简介 环境信息 创建TLS加密通信的证书和密钥 下载和配置 kubectl(kubecontrol) 命令行工具 创建 kubeconfig 文件 创建高可用 etcd ...
- 关于Kubernetes v1.14.0的 kube-controller-manager部署
1. kube-controller-manager准备 默认kube-controller-manager 部署在kube-apiserver部署的服务器上面服务器的配置等在这就不在列出来 二进制文 ...
- 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- Kubernetes 1.10.0离线安装
讲述如何通过离线的方式安装Kubernetes,主要用于对Kubernetes的研究学习,不建议在生产环境使用,安装包获取地址: 链接:https://pan.baidu.com/s/1nX5_mem ...
- 使用 kubeadm 安装 kubernetes v1.16.0
近日通过kubeadm 安装 kubernetes v1.16.0,踩过不少坑,现记录下安装过程. 安装环境: 系 统:CentOS Linux release 7.6 Docke ...
- 002.使用kubeadm安装kubernetes 1.17.0
一 环境准备 1.1 环境说明 master 192.168.132.131 docker-server1 node1 192.168.132.132 doc ...
- 部署一套完整的Kubernetes高可用集群(二进制,v1.18版)
一.前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式: kubeadm Kubeadm是一个K8s部署工具,提供kubeadm ...
- 基于Kubernetes v1.24.0的集群搭建(二)
上一篇文章主要是介绍了,每台虚拟机的环境配置.接下来我们开始有关K8S的相关部署. 另外补充一下上一篇文章中的K8S的changelog链接: https://github.com/kubernet ...
- Windows Server 2008 R2 IIS7.5 部署 MVC HTTP 404.0 Not Found 错误
如图 在Windows Server 2008 R2 IIS7.5 部署 MVC HTTP 404.0 Not Found 错误,在Win7环境下测试正常,在百度中查找相关解决方法,如修改配置文件等, ...
- 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序. 可以在eclipse写好程序,export或用fatjar打包成jar文件. 先给出这个程序所依赖的Mave ...
随机推荐
- 【BZOJ2813】奇妙的Fibonacci
Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽 ...
- Libssh认证绕过CVE-2018-10933漏洞复现
0x00 漏洞描述 libssh 0.6 及以上的版本,在服务端的代码实现中存在身份认证绕过漏洞.在向服务端认证的流程中,攻击者通过将 SSH2_MSG_USERAUTH_REQUEST 消息替换为 ...
- RRDtool绘制lvs连接数图形
需求:用RRDtool绘制lvs的连接数图形 RRDtool是一个强大的绘图工具,作者是Tobias Oetiker. RRD全称Round Robin Database,轮转数据库,也是一个时间序列 ...
- Codeforces 901C. Bipartite Segments(思维题)
擦..没看见简单环..已经想的七七八八了,就差一步 显然我们只要知道一个点最远可以向后扩展到第几个点是二分图,我们就可以很容易地回答每一个询问了,但是怎么求出这个呢. 没有偶数简单环,相当于只有奇数简 ...
- loj2542「PKUWC2018」随机游走
题目描述 给定一棵 nn 个结点的树,你从点 xx 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 QQ 次询问,每次询问给定一个集合 SS,求如果从 xx 出发一直随机游走,直到点集 SS ...
- python调用powershell、远程执行bat
python调用本地powershell方法 1.现在准备一个简陋的powershell脚本,功能是测试一个IP列表哪些可以ping通: function test_ping($iplist) { f ...
- 计数排序与桶排序(bucket sort)
Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...
- win7,Ubuntu 12.04 双系统修改启动项顺序三方法
修改启动项顺序的三种方法 本文所涉及的方法都是在Ubuntu的安装时将引导加载程序grub安装在了整个硬盘(即MBR内),即开机以grub引导. 方法1在Ubuntu终端下输入:sudo mv /et ...
- GO_07:GO语言基础之method
方法 method 1. Go 中虽没有 class,但依旧有 method 2. 通过显示说明 receiver 来实现与某个类型的组合 3. 只能为同一个包中的类型定义方法 4. Receiver ...
- Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)
Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑配置文件(pml.xml)(我 ...