VM Ware安装CentOS模拟服务器搭建K8s环境

445 阅读9分钟

下载系统镜像光盘文件

[清华开源软件镜像站centos下载地址](Index of /centos/7.9.2009/isos/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)

image.png

[清华大学开源软件镜像站]

centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com))

安装虚拟机软件并配置CentOS光盘文件

这里使用的时VM player,有条件可以使用VM Ware Pro版本,当然其他虚拟机软件也可以。

  1. 点击创建新虚拟机

image.png

  1. 选择iso光盘镜像文件

直接选择DVD的iso文件即可,也可以选择稍后安装。

image.png

  1. 选择Linux和版本

image.png

  1. 选择相应的安装未知即可

image.png

如果选择稍后安装,点击这里的编辑虚拟机配置iso镜像即可

image.png

安装CentOS

  1. 启动虚拟机,进入安装页面,选择install CentOS7

image.png

  1. 选择语言

默认美式英文即可

image.png

  1. 配置时区

点击DATE & TIME在出现的地图上点击上海所在区域即可。

image.png

  1. 配置系统和分区

点击INSTALL TION ...,在点击DONE默认即可

image.png 5. 配置网络

安装虚拟机归属于局域网,需要配置局域网ip。点击NETWORK & ...开启ens33重命名主机名点击Apply,最后点击Done

image.png

最后点击Begin Installtion

  1. 配置Root用户密码并创建一个用户

image.png

用户密码都是随便设置的,如果显示太短连点两次Done即可

root : root
pass : root

user : centos01
pass : root

image.png

到此已经配置完成了,等待进度条完成即可。

image.png

点击Reboot,由于安装时选择的最小软件,因此时没有Gome桌面的时终端命令版。

image.png

克隆多台主机修改网络配置

  1. 文件夹复制三份,专业版vm 有克隆功能无需复制

image.png

安装完虚拟机后,将虚拟机克隆两份,如果使用的Plaer版,直接复制文件夹在对应的文件下复制已安装的虚拟机。点击打开

image.png

  1. 配置静态网址

切换root用户,进入到cd /etc/sysconfig/network-scripts/目录下,编辑如下划线文 件

image.png

原始内容如下

image.png

修改dhcp为静态static,追加ip,子网,网关信息

image.png

IPADDR="192.168.42.132"
NETMASK="255.255.255.0"
GATEWAY="192.168.42.2"

这个ip地址和网关信息在安装的NETWORK配置以及显示了,如下 image.png

  1. 重启网络

service network restart

ip addr 命令查看ip信息,和配置一样即为静态网络配置成功。

image.png

  1. 修改主机名

vi /etc/hostname

注意上述步骤只需要修改克隆的两台主机即可,保证局域网下ip唯一,主机名唯一即可。

最终就是三台主机三个ip地址

image.png

搭建k8s预设环境

之后的所有命令最好使用root用户

在正式安装k8s插件时还有一系列的铺垫操作,k8s不是直接安装就可以用的还需要对系统预设环境,卸载或安装可能导致的问题的工具。

主机名ip addr
centos01192.168.42.131
centos02192.168.42.132
centos03192.168.42.133

在搭建环境之前一定要注意的是k8s与docker容器的版本对应关系,因为k8s是多个组件的统称,如果k8s组件与docker版本之间存在冲突就会造成环境搭建失败。

k8s:截止2022.09.23(当前最新)的k8s软件版本支持docker容器引擎的情况:汇总信息 - jinzhenshui - 博客园 (cnblogs.com)

  1. 本地DNS配置

方便集群节点间的直接调用

vi /etc/hosts

image.png

  1. 同步时间
  • 安装yum install chrony -y

image.png

image.png

  • 设置开启启动
systemctl start chronyd
systemctl enable chronyd
  • 设置服务端所有从节点从服务端同步时间

选择master(centos01=192.168.42.131)节点为服务端

vim /etc/chrony.conf

修改红方框的内容

image.png

# Allow NTP client access from local network.  允许所有主机从server端同步时间
allow all 
 
# Serve time even if not synchronized to a time source.  即使server端无法从互联网同步时间,也同步本机时间至client
local stratum 10 

客户端同步配置,vim /etc/chrony.conf 注释原server配置,改为 server 机器 IP 地址

image.png

  • 重启chronyd服务查看同步情况

重启服务systemctl restart chronyd

查看在线情况chronyc activity

查看时间同步情况chronyc tracking

image.png

  1. 禁用iptablesfirewalld服务

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

  • 关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld

或者是

systemctl status firewalld.service 
systemctl stop firewalld.service 
systemctl disable firewalld.service 
firewall-cmd --state

查看是否成功关闭systemctl status firewalld

image.png

  • 关闭iptables服务
systemctl stop iptables
systemctl disable iptables

或者是

yum install iptables-services
systemctl status iptables.service 
systemctl stop iptables.service 
systemctl disable iptables.service
reboot
  1. 禁用selinux

selinuxlinux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的问题。

sed -i 's/enforcing/disabled/' /etc/selinux/config

或者vi /etc/selinux/config手动修改SELINUX=disabled

image.png

  1. 禁用swap分区

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

vi /etc/fstab

注释掉划红线的部分(存在swap一行)

image.png

  1. 修改Linux内核参数
  • vi /etc/sysctl.d/kubernetes.conf

我们需要修改linux的内核参数,添加网桥过滤和地址转发功能,编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
  • 重新加载配置sysctl -p

  • 加载网桥过滤模块modprobe br_netfilter

  • 查看网桥过滤模块是否加载成功lsmod | grep br_netfilter

image.png

  1. 配置 ipvs 功能

kubernetesservice有两种代理模型,一种是基于iptables的,一种是基于ipvs的 相比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块



# 安装ipset和ipvsadm
yum install ipset ipvsadmin -y


# 添加需要加载的模块写入脚本文件
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


# 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules

# 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules


# 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

image.png

重启主机,查看所有配置是否生效。

image.png

由上图可以看出selinux已关闭,swap分区已禁用。

docker容器环境搭建及k8s预设

k8s主要由三个组件组成kubeadmin,kubelet,kubectl。需要在所有主机上安装三个服务,需要注意的是三个组件都直接或间接管理docker,因此需要控制版本,不能有冲突。

Kubernetes各版本对应支持的docker版本列表-腾讯云开发者社区-腾讯云 (tencent.com)

这里选用k8s-1.17.4版本和docker-18.06

  1. docker安装
  • 切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

image.png

  • 安装指定版本的docker-ce
# 必须指定--setopt=obsoletes=0,否则yum会自动安装更高版本
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
  • 添加一个配置文件
# Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
mkdir /etc/docker
# 添加阿里云 yum 源, 可从阿里云容器镜像管理中复制镜像加速地址
cat <<EOF > /etc/docker/daemon.json
{
        "exec-opts": ["native.cgroupdriver=systemd"],
        "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}

EOF

  • 启动docker
# 启动docker
systemctl enable docker
systemctl start docker
systemctl restart docker

docker version查看docker安装情况

image.png

docker info | grep -i "Cgroup Driver"查看Cgroup Driver是否改变。

image.png

安装Kubernetes与初始化

  1. 由于 kubernetes 的镜像源在国外,速度比较慢,因此我们需要切换成国内的镜像源。
# 编辑 /etc/yum.repos.d/kubernetes.repo 添加一下配置
vi /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
  1. 安装kubeadmkubeletkubectl 三个组件
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
  1. 配置 kubelet 的group

vi /etc/sysconfig/kubelet

# 编辑 /etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

设置kubelet开机自启 systemctl enable kubelet.service

image.png

  1. 创建集群
# 由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址
kubeadm init \
--apiserver-advertise-address=192.168.42.131 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 

当出现如下所示的提示时表示k8s初始化成功。

image.png

添加集群节点

看如下提示,按照提示添加节点

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.42.131:6443 --token go4ml9.a4u1wkdf4cgmiiyb \
    --discovery-token-ca-cert-hash sha256:a44cd21fe260fbbcb2d47e9f81d7d128821e53795d4c6d189fd8695f90b70981

主节点上运行

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

从节点上运行

kubeadm join 192.168.42.131:6443 --token go4ml9.a4u1wkdf4cgmiiyb \ --discovery-token-ca-cert-hash sha256:a44cd21fe260fbbcb2d47e9f81d7d128821e53795d4c6d189fd8695f90b70981

image.png

运行后可以看到节点都被添加到了主节点

image.png

安装网络插件

安装网络插件的步骤只在主节点进行。

kubernetes支持多种网络插件,比如flannelcalicocanal等等,这里选择使用flannel

yum安装 flannel (jimmysong.io)

下载插件安装

Releases · flannel-io/flannel (github.com)

image.png

上传到master服务器

image.png

执行如下命令

docker load < flanneld-v0.13.0-amd64.docker

image.png

执行完成之后就有了flanel镜像

image.png

主节点下载flannel配置文件执行如下命令:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果该命令无法连接,直接去github上下载

Releases · flannel-io/flannel (github.com)

image.png

上传到主节点

image.png

执行如下命令

# 如果该命令在一开始就能执行就可以省略上面下载上传步骤
# flannel.yml上传成功该命令不用再执行
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 使用配置文件启动fannel
kubectl apply -f kube-flannel.yml

# 再次查看集群节点的状态
kubectl get nodes

image.png

image.png

可以看到主节点状态已经变为Ready

image.png

到此网络插件fannel也安装完成了。k8s集群也安装完成了。

image.png

如上图所示centos01为master节点,其他两个分别为node节点,组成一主两从的集群。

测试k8s集群

k8s是一个容器的编排工具,基于容器进行,可以使用k8s部署nginx程序来测试k8s集群是否创建成功。

# 部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine

# 暴露端口
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort

# 查看服务状态
kubectl get svc

image.png

如上图所示,nginx服务端口映射为80:32157那么就可以通过node节点的ip加映射的外部端口访问该服务。

image.png

image.png

132和133节点都能访问nginx服务。