Kubernetes(K8S)之学废了(二):安装部署k8s集群环境

使用kubeadm安装k8s

  • 安装准备
  • 环境初始化
  • 安装docker
  • 安装kubenetes组件
  • 集群环境所需组件安装
  • 环境测试

该记录是我在B站看的视频做的笔记,方便你我他,如果想看视频,可以移步到这:https://www.bilibili.com/video/BV1Qv41167ck?p=11&spm_id_from=pageDriver

安装准备

我是在虚拟机上安装的centos7

主机硬件配置

操作系统环境:CPU(2C) 内存(2G) 硬盘(50G)
网络配置:选择手动,网络地址:192.168.242.100 (每台主机都不一样 分别为100、101、102)
子网掩码:255.255.255.0
默认网关:192.168.109.2
DNS: 223.5.5.5

环境初始化

注意:以下操作在三台机器上都需要执行

  1. 检查操作系统的版本

cat /etc/redhat-release 版本要在7.5上

  1. 主机名解析
    为了方便后面集群节点间的直接调用,在这配置一下主机名解析,企业中推荐使用内部DNS服务器

主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容
192.168.109.100 master
192.168.109.101 node1
192.168.109.102 node2

  1. 时间同步
    kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间

1.启动chronyd服务:
systemctl start chronyd
2.设置chronyd服务开机自启 :
systemctl enable chronyd
3.chronyd服务启动稍等几秒钟,就可以使用date命令验证时间了

  1. 禁用iptables和firewalld服务
    kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

1.关闭firewalld服务:
systemctl stop firewalld
2.设置关闭开机自启
systemctl disable firewalld
3.关闭iptables服务
systemctl stop iptables
systemctl disable iptables

  1. 禁用selinux
    selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

vim /etc/selinux/config
修改SELINUX的值为disabled
修改后需要重启,我们先不重启,等到最后一起重启

  1. 禁用swap分区
    swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用;启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备

vim /etc/fstab 注释掉swap分区一行
注意修改完毕之后需要重启linux服务,我们也先不重启

  1. 修改linux的内核参数
    修改linux的内核参数,添加网桥过滤和地址转发功能

1.vim /etc/sysctl.d/kubernetes.conf
添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
2.保存退出后,重新加载配置:
sysctl -p
3.加载网桥过滤模块
modprobe br_netfilter
4.查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter

  1. 配置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.最后重启服务器
因为上面有几处都是需要重启机器的,现在我们一起重启

reboot

安装docker

重启完成后,开始安装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
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第1张图片
3.安装我们需要的版本的docker-ce
使用 --setopt=obsoletes=0,否则yum会自动安装更高版本;
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -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”]
}
EOF
5.启动dockers
systemctl restart docker
systemctl enable docker
6.查看docker状态和版本,确定是否为我们安装的版本
docker version
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第2张图片

安装kubenetes组件

1.切换成国内的镜像源
vim /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
2.安装kubeadm、kubelet和kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
3.配置kubelet的cgroup
vim /etc/sysconfig/kubelet
添加下面的配置:
KUBELET_CGROUP_ARGS=“–cgroup-driver=systemd”
KUBE_PROXY_MODE=“ipvs”
设置kubelet开机自启
systemctl enable kubelet

集群环境所需组件安装

1.准备镜像
在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看

kubeadm config images list

可以看到有七个
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第3张图片
2.下载镜像

1.定义变量
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
2.使用for循环进行安装
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
注意:由于编辑问题。我在$ 与字符串之间用了空格,大家在使用的时候先把空格去掉,一整块复制
3.使用docker images 查看,已经下载的镜像
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第4张图片

3.集群初始化
集群初始化,就是安装集群的过程.将拉取的镜像安装
下面操作只需要在master上面执行即可

1.创建集群
kubeadm init
–kubernetes-version=v1.17.4
–pod-network-cidr=10.244.0.0/16
–service-cidr=10.96.0.0/12
–apiserver-advertise-address=192.168.242.100
注意:大家只需要更换最后一项的IP地址为自己的就行

执行完后看到如下图(result),我叫他result,因为后面会用到
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第5张图片

4.创建必要文件
根据自己上图中的显示2,复制执行就行

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

5.查看node节点

kubectl get nodes
可以看到当前是没有节点的在这里插入图片描述

6.将node节点加入集群
下面的操作只需要在node节点上执行即可
根据自己result图中的显示4,复制执行就行

kubeadm join 192.168.242.100:6443 \
–token 8507uc.o0knircuri8etnw2
–discovery-token-ca-cert-hash
sha256:acc37967fb5b0acf39d7598f8a439cc7dc88f439a3f4d0c9cae88e7901b9d3f
我在此遇到这样一个报错
在这里插入图片描述
我在后面添加一个参数–ignore-preflight-errors=SystemVerification,然后成功了
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第6张图片

7.再次在master上查看节点
已经成功增加了两个节点
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第7张图片
看到此处node节点状态是NotReady,是因为网络插件没有安装,现在各个节点之间无法进行通信

默认的token有效期为24小时,当过期之后,该token就不能用了,这时可以使用如下的命令创建token:
kubeadm token create --print-join-command
生成一个永不过期的token:
kubeadm token create --ttl 0

8.网络插件安装
kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel
下面操作依旧只在master节点执行即可,插件使用的是DaemonSet的控制器,它会在每个节点上都运行

1.下载fannel的配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.使用配置文件启动fannel
kubectl apply -f kube-flannel.yml
3.查看部署CNI网络插件进度
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第8张图片
4.稍等一会,就可以看到node节点的状态已经变成Ready
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第9张图片

以上,kubernetes的集群环境搭建完成

环境测试

kubernetes集群中部署一个nginx程序,测试下集群是否在正常工作

部署nginx:
kubectl create deployment nginx --image=nginx:1.14-alpine
暴露端口:外面可以访问
kubectl expose deployment nginx --port=80 --type=NodePort
NodePort就是代表可以让集群之外的浏览器访问nginx
查看服务状态:
kubectl get pods,service
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第10张图片
Kubernetes(K8S)之学废了(二):安装部署k8s集群环境_第11张图片

到此,就成功搭建了集群环境啦!!!

你可能感兴趣的:(kubenetes,k8s)