首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,079 阅读
2
类的加载
740 阅读
3
Spring Cloud OAuth2.0
725 阅读
4
SpringBoot自动装配原理
690 阅读
5
集合不安全问题
583 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
388
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
页面
统计
关于
搜索到
1
篇与
的结果
2021-10-23
Sealos3.0离线部署K8s集群
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 network2. 设置hostnamehostname统一格式为 ==节点名.k8s==如:master.k8s,node1.k8s,node2.k8s# 修改hostname hostnamectl set-hostname master.k8s # 查看修改结果 hostnamectl status # 设置 hostname 解析 echo "127.0.0.1 $(hostname)" >> /etc/hosts3. 更换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 makecache4. 挂载数据硬盘无需挂载则跳过此步骤(1)运行fdisk -l查看硬盘详细信息(2)初始化分区执行fdisk /dev/sdc输入p打印分区表,查看分区情况,可以看到,标记处无任何分区信息输入n新建分区输入p再次查看分区表输入w保存退出执行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编辑/etc/fstab文件,在末尾添加新增的磁盘信息# UUID [挂载点] [磁盘类型] defaults 0 0 # 二者任选其一 # /dev/sdb1 /data xfs defaults 0 0 执行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此项跟后续安装sealos,kubens,k8sreload工具有关,若不使用该工具则跳过三、准备环境# 创建目录 # 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 # 客户端四、安装k8sk8s版本选择1.18.91.安装sealossealos是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.92.1检查集群状态kubectl get nodes -o wide2.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-399992.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上已有的Pod2.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"=node22.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_profile2.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登录harboa.命令行方式创建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: xxxxxxxxx4. 安装ingress注:ingress官方建议将ingress部署至master节点,该部署手册中未开启master支持pod调度的功能,在执行部署命令之前需先执行# 2.4节已执行过该命令,无需重复添加 kubectl label nodes master.k8s "xxx/role"=mastermaster节点添加标签后需编辑 ingress.yaml 文件,执行vim ingress.yaml,添加nodeSelector标签,将该pod直接调度到master节点最后执行部署# 进入到ingress文件夹 cd /home/xxx/res/plugin/ingress kubectl apply -f ingress.yaml5. 安装Kuboard此处安装Kuboard v2版本,Kuboard官网地址:https://kuboard.cnkubectl 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. 安装NFSnfs-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.ymlNFS部署在default命名空间下,执行kubectl get pod检查NFS状态至此,k8s基础环境部署完毕五、应用1. 上传部署文件将yaml配置文件上传至/home/xxx/deploy/xxx2.执行对应服务的yaml文件# 部署 kubectl apply -f xxx.yaml # 或者执行 k8sreload xxx.yaml # 以上命令二选一 # 删除pod kubectl delete -f xxx.yaml六、其他1. 部署pod至指定节点在具体的yaml文件中指定 nodeSelectorapiVersion: apps/v1 kind: Deployment spec: template: spec: nodeSelector: #node节点标签选择器 "xxx/role": master #node节点标签内容2. 设置容器使用secreta. 在具体的xxx.yaml中设置apiVersion: v1 spec: template: spec: imagePullSecrets: - name: approval-docker-harborb. 设置默认账户方式此方式是设置给对应的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
2021年10月23日
1,079 阅读
0 评论
0 点赞