2. kubernetes集群环境搭建
2.1 前置知识点
目前生产部署Kubernetes 集群主要有两种方式:
kubeadm
Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二进制包
从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。
Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
2.2 kubeadm 部署方式介绍
kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
- 创建一个Master 节点kubeadm init
- 将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>
2.3 安装要求
在开始之前,部署Kubernetes 集群机器需要满足以下几个条件:
- 一台或多台机器,操作系统CentOS7.x-86_x64
- 硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘30GB 或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止swap 分区
2.4 最终目标
- 在所有节点上安装Docker 和kubeadm
- 部署Kubernetes Master
- 部署容器网络插件
- 部署Kubernetes Node,将节点加入Kubernetes 集群中
- 部署Dashboard Web 页面,可视化查看Kubernetes 资源
2.5 准备环境
角色 | IP地址 | 组件 |
---|---|---|
master01 | 192.168.5.3 | docker,kubectl,kubeadm,kubelet |
node01 | 192.168.5.4 | docker,kubectl,kubeadm,kubelet |
node02 | 192.168.5.5 | docker,kubectl,kubeadm,kubelet |
2.6 环境初始化
2.6.1 检查操作系统的版本
1 | # 此方式下安装kubernetes集群要求Centos版本要在7.5或之上 |
2.6.2 主机名解析
为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器
1 | # 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容 |
2.6.3 时间同步
kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间
企业中建议配置内部的会见同步服务器
1 | # 启动chronyd服务 |
2.6.4 禁用iptable和firewalld服务
kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
1 | # 1 关闭firewalld服务 |
2.6.5 禁用selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
1 | # 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable |
2.6.6 禁用swap分区
swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
1 | # 编辑分区配置文件/etc/fstab,注释掉swap分区一行 |
2.6.7 修改linux的内核参数
1 | # 修改linux的内核采纳数,添加网桥过滤和地址转发功能 |
2.6.8 配置ipvs功能
在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
1 | # 1.安装ipset和ipvsadm |
2.6.9 安装docker
1 | # 1、切换镜像源 |
2.6.10 安装Kubernetes组件
1 | # 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源 |
2.6.11 准备集群镜像
1 | # 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看 |
2.6.11 集群初始化
下面的操作只需要在master节点上执行即可
1 | # 创建集群 |
下面的操作只需要在node节点上执行即可
1 | kubeadm join 192.168.0.100:6443 --token awk15p.t6bamck54w69u4s8 \ |
在master上查看节点信息
1 | [root@master ~]# kubectl get nodes |
2.6.13 安装网络插件,只在master节点操作即可
1 | wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
由于外网不好访问,如果出现无法访问的情况,可以直接用下面的 记得文件名是kube-flannel.yml,位置:/root/kube-flannel.yml内容:
1 | https://github.com/flannel-io/flannel/tree/master/Documentation/kube-flannel.yml |
也可手动拉取指定版本
docker pull quay.io/coreos/flannel:v0.14.0 #拉取flannel网络,三台主机
docker images #查看仓库是否拉去下来
个人笔记
若是集群状态一直是 notready,用下面语句查看原因,
journalctl -f -u kubelet.service
若原因是: cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
mkdir -p /etc/cni/net.d #创建目录给flannel做配置文件
vim /etc/cni/net.d/10-flannel.conf #编写配置文件
1 |
|
2.6.14 使用kubeadm reset重置集群
1 | #在master节点之外的节点进行操作 |
2.6.15 重启kubelet和docker
1 | # 重启kubelet |
使用配置文件启动fannel
1 | kubectl apply -f kube-flannel.yml |
等待它安装完毕 发现已经是 集群的状态已经是Ready
2.6.16 kubeadm中的命令
1 | # 生成 新的token |
2.7 集群测试
2.7.1 创建一个nginx服务
1 | kubectl create deployment nginx --image=nginx:1.14-alpine |
2.7.2 暴露端口
1 | kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort |
2.7.3 查看服务
1 | kubectl get pod,svc |
2.7.4 查看pod
浏览器测试结果: