Sealos3.0离线部署K8s集群

suaxi
2021-10-23 / 0 评论 / 1,073 阅读 / 正在检测是否收录...

2022.8.14补充:sealos3.0原部署方式已下线,4.0可以参照官方文档,笔记待补充

Sealos离线部署K8s集群

准备工具

xshell,xftp,centos 7.9,k8s 1.18.9离线安装包

开始安装:

一、安装系统

1. 选择最小安装
2. 分区
3. 设置账户

二、系统设置

1. 网络设置

集群内服务器设置为静态IP,使用vim修改 /etc/sysconfig/network-scripts/ifcfg-ensxxx

# 修改配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ensxxx

# 配置静态IP
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=192.168.5.130
GATEWAY=192.168.5.2
NETMASK=255.255.255.0
DEVICE=eth0
MTU=1500
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
ZONE=public
DNS1=8.8.8.8

修改保存之后重启网络

systemctl restart network
2. 设置hostname

hostname统一格式为 ==节点名.k8s==

如:master.k8s,node1.k8s,node2.k8s

# 修改hostname
hostnamectl set-hostname master.k8s

# 查看修改结果
hostnamectl status

# 设置 hostname 解析
echo "127.0.0.1   $(hostname)" >> /etc/hosts
3. 更换yum源
# 备份原配置文件
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

# 下载阿里云yum
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 两条命令任选其一
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 清理缓存
yum clean all

# 生成新的缓存
yum makecache

添加epel源(如果已存在,同理执行备份替换)

# 查看一下系统是否已有epel
rpm -qa |grep epel

# 如果已存在,卸载以前的epel以免受影响
rpm -e epel-release

# 更换为阿里的epel源
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo

# 清理缓存
yum clean all

# 生成新的缓存
yum makecache
4. 挂载数据硬盘

无需挂载则跳过此步骤

(1)运行fdisk -l查看硬盘详细信息

image-20210907102848630.png

(2)初始化分区

执行fdisk /dev/sdc

image-20210907110605383.png

输入p打印分区表,查看分区情况,可以看到,标记处无任何分区信息

image-20210907110723904.png

image-20210907105611253.png

输入n新建分区

image-20210907110809284.png

输入p再次查看分区表

image-20210907110846656.png

输入w保存退出

image-20210907110916448.png

执行fdisk -l查看已创建的分区

(3)创建物理卷

执行partprobe /dev/sdc,在不重启系统的情况下重新读取分区表信息

# 安装lvm2工具
yum install lvm2

# 创建物理卷
pvcreate /dev/sdc1

格式化磁盘

# ext4、xfs格式按需选择
mkfs.xfs /dev/sdc1

(4)创建挂载点,并挂载磁盘

mkdir /data
mount /dev/sdc1 /data

执行df -Th可查看挂载情况

(5)设置系统开机自动挂载磁盘

执行blkid /dev/sdc1查看磁盘的uuid

image-20210907111532424.png

编辑/etc/fstab文件,在末尾添加新增的磁盘信息

# UUID [挂载点] [磁盘类型] defaults 0 0
# 二者任选其一
# /dev/sdb1 /data xfs defaults 0 0 

image-20210907113043759.png

执行mount -a检查配置

注:添加配置文件保存后一定要mount -a检查通过再执行reboot重启

5. 同步集群时间

执行crontab -e,在末尾添加以下cron定时任务,集群中的每个节点都必须执行

# 每天零点零一分执行时间同步任务
01 00 * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1 &

保存后显示定时任务创建成功

执行contab -l,可查看已创建的任务

6. 关闭防火墙
systemctl stop firewalld        # 临时关闭,重启失效

systemctl disable firewalld        # 永久关闭
7. /usr/local/bin 全局命令设置

执行vim ~/.bashrc,在末尾添加

export PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:"

保存后执行刷新读取命令

source .bashrc

此项跟后续安装sealoskubensk8sreload工具有关,若不使用该工具则跳过

三、准备环境

# 创建目录
# k8s 部署目录
mkdir -p /home/xxx/deploy

# 应用目录
mkdir /home/xxx/deploy/xxx

# 资源目录
mkdir /home/xxx/res

# 插件目录
mkdir /home/xxx/res/plugin

# 应用基础镜像目录
mkdir /home/xxx/res/images

# 应用业务镜像目录
mkdir /home/xxx/res/busi
mkdir /home/xxx/res/busi/service

# 目录结构
└── xxx
    ├── deploy                  # 项目部署文件
    │   └── xxx
    └── res                     # 资源目录
        ├── busi                 # 应用业务镜像目录
        ├── images                 # 基础镜像
        ├── kube1.18.9.tar.gz    # k8s离线包
        ├── plugin                # 插件
        ├── service                # 服务端
        └── web                    # 客户端

四、安装k8s

k8s版本选择1.18.9

1.安装sealos

sealos是k8s一键安装工具,官网地址:https://www.sealyun.com/

# 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos && chmod +x sealos && mv sealos /usr/local/bin/
# 上传离线资源包到主节点
2.初始化集群

sealos init 命令解释, https://www.sealyun.com/instructions

# 一主双从Kubernertes集群
sealos init --master 192.168.5.130 \
    --node 192.168.5.131 \
    --node 192.168.5.132 \
    --user root \
    --passwd '123456' \
    --pkg-url /home/xxx/res/kube1.18.9.tar.gz \
    --version v1.18.9
2.1检查集群状态
kubectl get nodes -o wide
2.2修改端口范围

k8s NodePort 端口范围设置为30000-39999

# 编辑kube-apiserver.yaml
vim /etc/kubernetes/manifests/kube-apiserver.yaml

# 添加端口配置到 spec.containers.command.kube-apiserver
- --service-node-port-range=30000-39999
2.3设置master支持部署pod

此项根据实际情况选择,如果不需要master支持pod则跳过

#允许master节点部署pod
kubectl taint nodes --all node-role.kubernetes.io/master-

#如果不允许调度
kubectl taint nodes master1 node-role.kubernetes.io/master=:NoSchedule

#污点可选参数
#     NoSchedule: 一定不能被调度
#    PreferNoSchedule: 尽量不要调度
#    NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
2.4 node节点添加标签

格式要求:"xxx/role"=master,"xxx/role"=node1,"xxx/role"=node2

# 查看节点标签详细信息
kubectl get nodes --show-labels

# 设置标签
kubectl label nodes master.k8s "xxx/role"=master
kubectl label nodes node1.k8s "xxx/role"=node1
kubectl label nodes node2.k8s "xxx/role"=node2
2.5 修复子节点kubectl 命令不可用

此项按需选择,如果无需子节点支持kubectl命令则跳过

# 拷贝master节点/etc/kubernetes/admin.conf文件至node节点
scp /etc/kubernetes/admin.conf root@192.168.5.131:/etc/kubernetes/

# 在对应的node节点执行以下命令
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
2.6 k8s tab键修复
# 安装bash-completion
yum install -y bash-completion

# 编辑~/.bashrc
vim ~/.bashrc

# 在末尾添加以下行
source  <(kubectl  completion  bash)

# 最后运行
source ~/.bashrc
source /etc/profile

# 对应的node节点也需运行上面2行命令或退出重新登录
2.7 更换docker根文件目录

docker文件默认路径是 /var/lib/docker,检查该目录磁盘空间是否足够,根据实际情况修改。

注:如果docker根目录文件所处的磁盘空间较小,一定要将docker根文件目录更换至空间较大的数据盘下

修改docker文件目录

# 停止所有节点上的docker
systemctl stop docker

# 编辑 /etc/docker/daemon.json,修改data-root目录
vim /etc/docker/daemon.json

# 移动docker的数据文件到新目录
mv /var/lib/docker /data/docker

# 启动
systemctl start docker

注:所有节点依次执行,修改此项尽量不要使用 xshell发送输入命令到所有会话 功能,网络延迟对同时发送命令可能会产生较大的影响

3. 添加k8s拉取harbor镜像账户
3.1添加docker仓库地址
# 编辑daemon.json
vim /etc/docker/daemon.json

{
    "insecure-registries": "harbor.xxx.com"
}
3.2 创建k8s登录harbo

a.命令行方式创建

kubectl create secret docker-registry approval-docker-harbor \
--docker-server=harbor.xxx.com \
--docker-username=xxx\
--docker-password='123456'

b.yaml方式创建

apiVersion: v1
kind: Secret
metadata:
  namespace: xxx
  name: approval-docker-harbor
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: xxxxxxxxx
4. 安装ingress

注:ingress官方建议将ingress部署至master节点,该部署手册中未开启master支持pod调度的功能,在执行部署命令之前需先执行

# 2.4节已执行过该命令,无需重复添加
kubectl label nodes master.k8s "xxx/role"=master

master节点添加标签后需编辑 ingress.yaml 文件,执行vim ingress.yaml,添加nodeSelector标签,将该pod直接调度到master节点

最后执行部署

# 进入到ingress文件夹
cd /home/xxx/res/plugin/ingress
kubectl apply -f ingress.yaml
5. 安装Kuboard

此处安装Kuboard v2版本,Kuboard官网地址:https://kuboard.cn

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml

# 查看Kuboard运行状态
kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system

获取登录Token(注意保存token,切勿泄露

# 在master节点执行以下命令
# 管理员
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep ^kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

# 只读用户(无操作权限)
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep ^kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

Kuboard管理地址:192.168.5.130:32567 (任意节点ip + 端口均可访问)

6. 安装NFS

nfs-client-provisioner.yml需要添加nodeSelector节点选择标签

6.1 安装NFS服务端
# 安装nfs相关工具
yum install -y nfs-utils

# 在文件/etc/exports中添加以下内容(vim /etc/exports)
#格式:[共享目录]:[共享主机](权限功能)
vim /etc/exports

/data/nfs 192.168.0.0/16(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501,fsid=0) localhost(rw)

# 创建nfs共享目录
mkdir /data/nfs -p

# 启动nfs
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs -r

#检查nfs创建结果
exportfs
#输出结果如下
/data/nfs <world>
6.2 安装NFS客户端
yum -y install nfs-utils

# 启动
systemctl start nfs-utils
systemctl enable nfs-utils

#查看相关信息
rpcinfo -p

#测试挂载,单节点不需要这步
mount [nfs服务ip]:[nfs共享路径]  [客户机挂载目录]
6.3 k8s部署NFS

添加nodeSelector节点选择标签(同理安装ingress)

# 添加node节点标签
# 若2.4节已执行过该命令,则此处无需重复执行
kubectl label nodes node1.k8s "xxx/role"=node1 
# 进入到nfs文件夹
cd /home/xxx/res/plugin/nfs

# 修改nfs服务地址,同时添加nodeSelector节点选择标签,参考下图
vim nfs-client-provisioner.yml

# 执行部署
kubectl apply -f nfs-client-provisioner.yml
kubectl apply -f class.yml
kubectl apply -f rbac.yml

QQ截图20211023202322.png

NFS部署在default命名空间下,执行kubectl get pod检查NFS状态

至此,k8s基础环境部署完毕

五、应用

1. 上传部署文件

将yaml配置文件上传至/home/xxx/deploy/xxx

2.执行对应服务的yaml文件
# 部署
kubectl apply -f xxx.yaml
# 或者执行
k8sreload xxx.yaml
# 以上命令二选一


# 删除pod
kubectl delete -f xxx.yaml

六、其他

1. 部署pod至指定节点

在具体的yaml文件中指定 nodeSelector

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      nodeSelector:             #node节点标签选择器
        "xxx/role": master       #node节点标签内容
2. 设置容器使用secret

a. 在具体的xxx.yaml中设置

apiVersion: v1
spec:
  template:
    spec:
      imagePullSecrets:
      - name: approval-docker-harbor

b. 设置默认账户方式

此方式是设置给对应的namespace(命名空间)下的用户,添加 imagePullSecrets,无需在部署文件中再使用,注:namespace为空对应默认用户(default)

# 命令方式
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "docker-harbor-secret"}]}' -n kubernetes-dashboard
# yaml文件方式
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: #NAME_SPACE#
    imagePullSecrets:
      - name: docker-harbor-secret
0

评论 (0)

取消