下载系统镜像光盘文件
[清华开源软件镜像站centos下载地址](Index of /centos/7.9.2009/isos/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)
centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com))
安装虚拟机软件并配置CentOS光盘文件
这里使用的时VM player,有条件可以使用VM Ware Pro版本,当然其他虚拟机软件也可以。
- 点击创建新虚拟机
- 选择iso光盘镜像文件
直接选择DVD的iso文件即可,也可以选择稍后安装。
- 选择Linux和版本
- 选择相应的安装未知即可
如果选择稍后安装,点击这里的编辑虚拟机配置iso镜像即可
安装CentOS
- 启动虚拟机,进入安装页面,选择
install CentOS7
- 选择语言
默认美式英文即可
- 配置时区
点击DATE & TIME在出现的地图上点击上海所在区域即可。
- 配置系统和分区
点击INSTALL TION ...,在点击DONE默认即可
5. 配置网络
安装虚拟机归属于局域网,需要配置局域网ip。点击NETWORK & ...开启ens33重命名主机名点击Apply,最后点击Done
最后点击Begin Installtion
- 配置Root用户密码并创建一个用户
用户密码都是随便设置的,如果显示太短连点两次Done即可
root : root
pass : root
user : centos01
pass : root
到此已经配置完成了,等待进度条完成即可。
点击Reboot,由于安装时选择的最小软件,因此时没有Gome桌面的时终端命令版。
克隆多台主机修改网络配置
- 文件夹复制三份,专业版vm 有克隆功能无需复制
安装完虚拟机后,将虚拟机克隆两份,如果使用的Plaer版,直接复制文件夹在对应的文件下复制已安装的虚拟机。点击打开
- 配置静态网址
切换root用户,进入到cd /etc/sysconfig/network-scripts/目录下,编辑如下划线文
件
原始内容如下
修改dhcp为静态static,追加ip,子网,网关信息
IPADDR="192.168.42.132"
NETMASK="255.255.255.0"
GATEWAY="192.168.42.2"
这个ip地址和网关信息在安装的
NETWORK配置以及显示了,如下
- 重启网络
service network restart
ip addr 命令查看ip信息,和配置一样即为静态网络配置成功。
- 修改主机名
vi /etc/hostname
注意上述步骤只需要修改克隆的两台主机即可,保证局域网下ip唯一,主机名唯一即可。
最终就是三台主机三个ip地址
搭建k8s预设环境
之后的所有命令最好使用root用户
在正式安装k8s插件时还有一系列的铺垫操作,k8s不是直接安装就可以用的还需要对系统预设环境,卸载或安装可能导致的问题的工具。
| 主机名 | ip addr |
|---|---|
| centos01 | 192.168.42.131 |
| centos02 | 192.168.42.132 |
| centos03 | 192.168.42.133 |
在搭建环境之前一定要注意的是k8s与docker容器的版本对应关系,因为k8s是多个组件的统称,如果k8s组件与docker版本之间存在冲突就会造成环境搭建失败。
k8s:截止2022.09.23(当前最新)的k8s软件版本支持docker容器引擎的情况:汇总信息 - jinzhenshui - 博客园 (cnblogs.com)
- 本地DNS配置
方便集群节点间的直接调用
vi /etc/hosts
- 同步时间
- 安装
yum install chrony -y
- 设置开启启动
systemctl start chronyd
systemctl enable chronyd
- 设置服务端所有从节点从服务端同步时间
选择master(centos01=192.168.42.131)节点为服务端
vim /etc/chrony.conf
修改红方框的内容
# 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 地址
- 重启chronyd服务查看同步情况
重启服务systemctl restart chronyd
查看在线情况chronyc activity
查看时间同步情况chronyc tracking
- 禁用iptables和firewalld服务
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
- 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
或者是
yum install iptables-services
systemctl status iptables.service
systemctl stop iptables.service
systemctl disable iptables.service
reboot
- 禁用selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的问题。
sed -i 's/enforcing/disabled/' /etc/selinux/config
或者vi /etc/selinux/config手动修改SELINUX=disabled
- 禁用swap分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用。
vi /etc/fstab
注释掉划红线的部分(存在swap一行)
- 修改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
- 配置 ipvs 功能
在kubernetes中service有两种代理模型,一种是基于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
重启主机,查看所有配置是否生效。
由上图可以看出selinux已关闭,swap分区已禁用。
docker容器环境搭建及k8s预设
k8s主要由三个组件组成kubeadmin,kubelet,kubectl。需要在所有主机上安装三个服务,需要注意的是三个组件都直接或间接管理docker,因此需要控制版本,不能有冲突。
Kubernetes各版本对应支持的docker版本列表-腾讯云开发者社区-腾讯云 (tencent.com)
这里选用k8s-1.17.4版本和docker-18.06
- docker安装
- 切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- 安装指定版本的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安装情况
docker info | grep -i "Cgroup Driver"查看Cgroup Driver是否改变。
安装Kubernetes与初始化
- 由于 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
- 安装kubeadm、kubelet和kubectl 三个组件
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
- 配置 kubelet 的group
vi /etc/sysconfig/kubelet
# 编辑 /etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
设置kubelet开机自启 systemctl enable kubelet.service
- 创建集群
# 由于默认拉取镜像地址 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初始化成功。
添加集群节点
看如下提示,按照提示添加节点
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
运行后可以看到节点都被添加到了主节点
安装网络插件
安装网络插件的步骤只在主节点进行。
kubernetes支持多种网络插件,比如flannel、calico、canal等等,这里选择使用flannel
下载插件安装
Releases · flannel-io/flannel (github.com)
上传到master服务器
执行如下命令
docker load < flanneld-v0.13.0-amd64.docker
执行完成之后就有了flanel镜像
主节点下载flannel配置文件执行如下命令:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果该命令无法连接,直接去github上下载
Releases · flannel-io/flannel (github.com)
上传到主节点
执行如下命令
# 如果该命令在一开始就能执行就可以省略上面下载上传步骤
# flannel.yml上传成功该命令不用再执行
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 使用配置文件启动fannel
kubectl apply -f kube-flannel.yml
# 再次查看集群节点的状态
kubectl get nodes
可以看到主节点状态已经变为Ready了
到此网络插件fannel也安装完成了。k8s集群也安装完成了。
如上图所示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
如上图所示,nginx服务端口映射为80:32157那么就可以通过node节点的ip加映射的外部端口访问该服务。
132和133节点都能访问nginx服务。