一、准备两台CentOS7主机

  1. 192.168.3.119
  2. 192.168.3.120
    在这里插入图片描述
    在这里插入图片描述

二、配置所有主机

设置主机名

设置192.168.3.119的主机名

hostnamectl set-hostname k8s-master

在这里插入图片描述
设置192.168.3.120的主机名

hostnamectl set-hostname worker-01

在这里插入图片描述

检查操作系统的版本

检查操作系统的版本(要求操作系统的版本至少在7.5以上)

cat /etc/redhat-release

在这里插入图片描述
在这里插入图片描述

关闭防火墙和禁止防火墙开机启动

关闭防火墙

systemctl stop firewalld

禁止防火墙开机启动

systemctl disable firewalld

在这里插入图片描述
在这里插入图片描述
关闭iptables服务

systemctl stop iptables

禁止iptables开机启动

systemctl disable iptables

在这里插入图片描述
在这里插入图片描述

关闭selinux

查看selinux是否开启

getenforce

在这里插入图片描述
在这里插入图片描述
永久关闭selinux(需要重启)

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

在这里插入图片描述
在这里插入图片描述
检查是否关闭成功
在这里插入图片描述
在这里插入图片描述

关闭swap分区

检查swap

cat /etc/fstab

在这里插入图片描述
在这里插入图片描述
永久关闭swap分区(需要重启)

sed -ri 's/.*swap.*/#&/' /etc/fstab

在这里插入图片描述
在这里插入图片描述

设置主机名解析

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

cat >> /etc/hosts << EOF
192.168.3.119 k8s-master
192.168.3.120 k8s-worker-01
EOF

在这里插入图片描述
在这里插入图片描述

设置时间同步

kubernetes要求集群中的节点时间必须精确一致,所以在每个节点上添加时间同步

yum -y install ntpdate
ntpdate time.windows.com

在这里插入图片描述
在这里插入图片描述

将桥接的IPv4流量传递到iptables链路

#加载br_netfilter模块

modprobe br_netfilter

查看是否加载

lsmod | grep br_netfilter

在这里插入图片描述
在这里插入图片描述
内核配置

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

在这里插入图片描述
在这里插入图片描述
重新加载配置

sysctl -p

在这里插入图片描述
在这里插入图片描述

配置ipvs功能

在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块

安装ipset和ipvsadm

yum -y install ipset ipvsadm

在这里插入图片描述
在这里插入图片描述
执行如下脚本:

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/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

执行脚本文件

sh /etc/sysconfig/modules/ipvs.modules

查看对应的模块

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

在这里插入图片描述
在这里插入图片描述

重启两台机器

reboot

安装Docker

安装20.10.12版本

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.12-3.el7 docker-ce-cli-20.10.12-3.el7 containerd.io

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置docker镜像加速

mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
 "registry-mirrors": [
  "https://nkapkbuo.mirror.aliyuncs.com",
  "https://dockerhub.azk8s.cn",
  "https://reg-mirror.qiniu.com"
 ],
 "insecure-registries": [],
 "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

在这里插入图片描述
在这里插入图片描述

#使配置生效
systemctl daemon-reload
#启动docker
systemctl restart docker
#开机启动docker
systemctl enable docker
#查看docker状态和版本
docker version

在这里插入图片描述
在这里插入图片描述

添加kubernetes阿里云的YUM软件源

由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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

yum clean all && yum makecache
yum list available | grep kube

在这里插入图片描述
在这里插入图片描述

安装kubeadm、kubelet和kubectl

yum -y install --setopt=obsoletes=0 kubeadm-1.23.9-0 kubelet-1.23.9-0 kubectl-1.23.9-0

在这里插入图片描述
在这里插入图片描述
为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容

vi /etc/sysconfig/kubelet

# 修改
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

在这里插入图片描述
在这里插入图片描述
设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet

在这里插入图片描述
在这里插入图片描述

三、安装k8s的Master节点

集群初始化

方式一

开始安装

# 使用--image-repository参数指定镜像仓库
# 使用该方法可以不需要提前拉取镜像
kubeadm init --kubernetes-version v1.23.9 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.3.119

方式二

查看k8s所需镜像并拉取

kubeadm config images list

在这里插入图片描述
在这里插入图片描述

使用阿里云镜像下载

需要注意的是,我们要安装与kubeadm版本一致的镜像

#shell执行
images=(
	kube-apiserver:v1.23.9
	kube-controller-manager:v1.23.9
	kube-scheduler:v1.23.9
	kube-proxy:v1.23.9
	pause:3.6
	etcd:3.5.1-0
)

执行循环开始拉去镜像并改镜像名

#shell执行
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

拉取coredns镜像(镜像名有些不一样,单独处理)

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6

在这里插入图片描述
在这里插入图片描述

查看镜像是否完整

docker images | grep "k8s.gcr.io"

在这里插入图片描述
在这里插入图片描述

开始安装

kubeadm init --kubernetes-version v1.23.9 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.3.119

安装完成

在这里插入图片描述
在这里插入图片描述
根据提示消息,在Master节点上使用kubectl工具

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

在这里插入图片描述

四、安装k8s的Worker节点

根据提示,在192.168.3.120上添加如下的命令,刚刚在master节点生成的
在这里插入图片描述
在这里插入图片描述

五、安装网络插件(Master节点上)

部署CNI网络插件
在Master节点上获取calico配置文件

wget https://docs.projectcalico.org/manifests/calico.yaml

Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
替换镜像源为quay.io。

sed -i 's/docker.io/quay.io/g' calico.yaml

部署Calico

kubectl apply -f calico.yaml

在这里插入图片描述
查看部署CNI网络插件进度

kubectl get pods -n kube-system

在这里插入图片描述
在Master节点使用kubectl工具查看节点状态

kubectl get nodes

在这里插入图片描述
查看集群健康状况

kubectl get cs

在这里插入图片描述

kubectl cluster-info

在这里插入图片描述

六、安装管理界面

rancher管理界面

vi rancher-install.sh

# 输入以下内容
#!/bin/bash

set -e

echo "[info] rancher version: v2.8.4/v2.8.3/v2.7.12/v2.7.10/v2.6.14"
echo "[info] default version: v2.7.10"

ver=v2.7.10
data_home=/opt/rancher/data

if [[ -n $1 ]]; then
  ver=$1
fi

echo "[info] current version: ${ver}"

cleanup() {
  echo "[info] failed"
  echo "[info] clean..."
  echo "[info] rm ${data_home}/${ver}"
  rm -rf ${data_home}/${ver};
}
trap 'cleanup' ERR

echo "[info] creating dir: ${data_home}/${ver}"
rm -rf ${data_home}/${ver};
mkdir -p ${data_home}/${ver}/rancher;
mkdir -p ${data_home}/${ver}/log;
mkdir -p ${data_home}/${ver}/kubelet;
mkdir -p ${data_home}/${ver}/cni;

echo "[info] pulling image: rancher/rancher:${ver}"
docker pull rancher/rancher:${ver}

echo "[info] running image: rancher/rancher:${ver}"
docker run -d --restart=always --privileged=true -p 80:80 -p 443:443 -v /etc/localtime:/etc/localtime -v ${data_home}/${ver}/rancher:/var/lib/rancher -v ${data_home}/${ver}/log:/var/log -v ${data_home}/${ver}/cni:/var/lib/cni -v ${data_home}/${ver}/kubelet:/var/lib/kubelet --name rancher-${ver} rancher/rancher:${ver}

echo "[info] succeed"

vi rancher-log.sh

# 输入以下内容
#!/bin/bash

set -e

echo "[info] rancher version: v2.8.4/v2.8.3/v2.7.12/v2.7.10/v2.6.14"
echo "[info] default version: v2.7.10"

ver=v2.7.10

if [[ -n $1 ]]; then
  ver=$1
fi

echo "[info] current version: ${ver}"

echo "[info] logs container: rancher-${ver}"
while true
do
  ui=`docker logs rancher-${ver} | grep "complete setup in the UI"`
  if [[ -n $ui ]]; then
    pass=`docker logs rancher-${ver} | grep "Bootstrap Password:"`
    echo "[info] ${pass}"
    echo "[info] ${ui}"
    exit
  fi
  sleep 1
done

echo "[info] succeed"

# 查看rancher界面密码
sh rancher-log.sh

在这里插入图片描述
将IP替换成192.168.3.119即可访问
在这里插入图片描述
设置密码并进入管理界面
在这里插入图片描述
访问地址: https://192.168.3.119/
用户名密码: admin/[界面设置的密码]
导入集群
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在master节点执行导入命令
在这里插入图片描述
等待完成即可享用
在这里插入图片描述

kuboard管理

wget --no-check-certificate https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
kubectl apply -f kuboard-v3.yaml
kubectl get pods -n kuboard -o wide

在这里插入图片描述
等待启动完成
在这里插入图片描述
登录地址: http://192.168.3.119:30080
用户名密码: admin/Kuboard123
在这里插入图片描述
在这里插入图片描述
导入集群
在这里插入图片描述
按照上图提示操作即可
在这里插入图片描述
在这里插入图片描述
导入成功,享用吧

七、如何选择管理界面

  • Rancher比较间接,操作简单,可以新建项目,按照需求将命名空间管理起来。
  • kuboard界面比较美观,操作较为复杂,内容很丰富。
  • 根据个人喜好进行选择即可。

八、FAQ

  1. The connection to the server localhost:8080 was refused - did you specify the right host or port?
vi /etc/profile
# 添加
KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile#即可解决
  1. rancher可能会出现的问题
    在这里插入图片描述
    则执行如下三条命令
sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-scheduler.yaml 
sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-controller-manager.yaml 
systemctl restart kubelet
  1. 污点去除
    Taints: node-role.kubernetes.io/master:NoSchedule
    解决方法:(以主机名为‘k8s-master’为例)
    执行:
kubectl taint nodes k8s-master node-role.kubernetes.io/master:NoSchedule-
kubectl describe node k8s-master | grep Taint

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐