入门到精通详解: https://pan.baidu.com/s/1ivoOl5iiSkv7LCFaNcvKVw 提取码:taly
有需要的自己取,跟着操作即可
本章节主要介绍如何搭建kubernetes的集群环境
环境规划
集群类型
kubernetes集群大体上分为两类:一主多从和多主多从。
-
一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境
-
多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境
说明:为了测试简单,本次搭建的是 一主两从 类型的集群
安装方式
kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包
-
minikube:一个用于快速搭建单节点kubernetes的工具
-
kubeadm:一个用于快速搭建kubernetes集群的工具
-
二进制包 :从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效
说明:现在需要安装kubernetes的集群环境,但是又不想过于麻烦,所以选择使用kubeadm方式
主机规划
作用 | IP地址 | 操作系统 | 配置 |
---|---|---|---|
Master | 10.0.0.120 | Centos7.9 基础设施服务器 | 2颗CPU 2G内存 50G硬盘 |
Node01 | 10.0.0.121 | Centos7.9 基础设施服务器 | 2颗CPU 2G内存 50G硬盘 |
Node02 | 10.0.0.122 | Centos7.9 基础设施服务器 | 2颗CPU 2G内存 50G硬盘 |
环境搭建
本次环境搭建需要安装三台Centos服务器(一主二从),然后在每台服务器中分别安装docker(19.03.12),kubeadm(1.19.13)、kubelet(1.19.13)、kubectl(1.19.13)程序。
主机安装
安装虚拟机过程中注意下面选项的设置:
-
操作系统环境:CPU(2C) 内存(2G) 硬盘(50G)
-
语言选择:中文简体
虚拟机克隆方便实验
环境初始化(三台主机)
1) 检查操作系统的版本
# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上 [root@master ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
2) 主机名解析
为了方便后面集群节点间的直接调用,在这配置一下主机名解析,企业中推荐使用内部DNS服务器
# 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容 cat <<EOF >/etc/hosts 10.0.0.120 master 10.0.0.121 node01 10.0.0.122 node02 EOF # 设置主机hostname hostnamectl set-hostname master hostnamectl set-hostname node01 hostnamectl set-hostname node02
3) 时间同步
kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间。
企业中建议配置内部的时间同步服务器
yum -y install ntpdate ntpdate cn.pool.ntp.org
4) 禁用iptables和firewalld服务
kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
# 1 关闭firewalld服务 systemctl stop firewalld systemctl disable firewalld # 2 关闭iptables服务 systemctl stop iptables systemctl disable iptables
5) 禁用selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disabled # 注意修改完毕之后需要重启linux服务 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
6) 禁用swap分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用
启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备
但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
# 编辑分区配置文件/etc/fstab,注释掉swap分区一行 # 注意修改完毕之后需要重启linux服务 swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
7)修改linux的内核参数
# 修改linux的内核参数,添加网桥过滤和地址转发功能 # 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置: cat <<EOF > /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF # 重新加载配置 sysctl -p sysctl --system # 加载网桥过滤模块 modprobe br_netfilter # 查看网桥过滤模块是否加载成功 lsmod | grep br_netfilter
8)配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
# 1 安装ipset和ipvsadm yum install ipset ipvsadm -y # 2 添加需要加载的模块写入脚本文件 cat <<EOF > /etc/sysconfig/modules/ipvs.modules #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF # 3 为脚本文件添加执行权限 chmod +x /etc/sysconfig/modules/ipvs.modules # 4 执行脚本文件 /bin/bash /etc/sysconfig/modules/ipvs.modules # 5 查看对应的模块是否加载成功 lsmod | grep -e ip_vs -e nf_conntrack_ipv4
9) 重启服务器
上面步骤完成之后,需要重新启动linux系统
[root@master ~]# reboot
安装docker
# 1 切换镜像源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo # 2 查看当前镜像源中支持的docker版本 yum list docker-ce --showduplicates # 3 安装特定版本的docker-ce # 必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本 yum install --setopt=obsoletes=0 docker-ce-19.03.12-3.el7.x86_64 -y # 4 添加一个配置文件 # Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs mkdir /etc/docker cat <<EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"],
"graph":"/data/docker" } EOF 注意:daemon.json 必须要添加,不然和kubelet会启动失败,而且"exec-opts": ["native.cgroupdriver=systemd"] 和kubelet中 KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"要都是 systemd
# 5 启动docker systemctl restart docker systemctl enable docker # 6 检查docker状态和版本 docker version
安装kubernetes组件
# 由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源 # 编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置 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 # 安装kubeadm、kubelet和kubectl yum install -y --setopt=obsoletes=0 kubeadm-1.19.13 kubectl-1.19.13 kubelet-1.19.13 # 配置kubelet的cgroup # 编辑/etc/sysconfig/kubelet,添加下面的配置 cat << EOF >> /etc/sysconfig/kubelet KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" EOF # 4 设置kubelet开机自启 systemctl enable kubelet
### 准备集群镜像
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看 [root@master ~]# kubeadm config images list k8s.gcr.io/kube-apiserver:v1.19.13 k8s.gcr.io/kube-controller-manager:v1.19.13 k8s.gcr.io/kube-scheduler:v1.19.13 k8s.gcr.io/kube-proxy:v1.19.13 k8s.gcr.io/pause:3.2 k8s.gcr.io/etcd:3.4.13-0 k8s.gcr.io/coredns:1.7.0 # 下载镜像脚本 #!/bin/bash images=( kube-apiserver:v1.19.13 kube-controller-manager:v1.19.13 kube-scheduler:v1.19.13 kube-proxy:v1.19.13 pause:3.2 etcd:3.4.13-0 coredns:1.7.0 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done