使用ansible部署K8S1.18集群并使用Kubesphere 3.1.1实现devops、日志收集、灰度发布、告警监控
离线安装集群
参考 https://github.com/easzlab/kubeasz/blob/master/docs/setup/offline_install.md
离线文件准备
在一台能够访问互联网的服务器上执行:
- 下载工具脚本easzup,举例使用kubeasz版本3.1.0
export release=3.1.0
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
- 使用工具脚本下载
默认下载最新推荐k8s/docker等版本,使用命令./easzup
查看工具脚本的帮助信息
# 举例使用 k8s 版本 v1.18.6,docker 19.03.5
./ezdown -D -d 19.03.14 -k v1.18.6
# 下载离线系统软件包
./ezdown -P
执行成功后,所有文件均已整理好放入目录/etc/ansible
,只要把该目录整体复制到任何离线的机器上,即可开始安装集群,离线文件包括:
/etc/ansible
包含 kubeasz 版本为 ${release} 的发布代码/etc/ansible/bin
包含 k8s/etcd/docker/cni 等二进制文件/etc/ansible/down
包含集群安装时需要的离线容器镜像/etc/ansible/down/packages
包含集群安装时需要的系统基础软件
离线文件不包括:
- 管理端 ansible 安装,但可以使用 kubeasz 容器运行 ansible 脚本
- 其他更多 kubernetes 插件镜像
离线安装
上述下载完成后,把/etc/ansible
整个目录复制到目标离线服务器相同目录,然后在离线服务器上运行:
- 离线安装 docker,检查本地文件,正常会提示所有文件已经下载完成
./easzup -D
- 启动 kubeasz 容器
./easzup -S
- 设置参数允许离线安装
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/chrony/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/ex-lb/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/kube-node/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/prepare/defaults/main.yml
在kubeasz容器内执行k8s的安装
docker exec -it kubeasz ezctl start-aio
如果需要配置1主多从的集群
#配置ssh登录node节点
ssh-copy-id root@192.168.11.11
#进入kubeasz容器中执行添加节点命令
docker exec -it kubeasz bash
#执行添加节点命令
ezctl add-node default 192.168.11.11
如果当前linux内核版本在4.4以下,kube-proxy的ipvs可能会有问题,导致dns无法解析
解决问题
1、升级系统内核版本
升级 Kubernetes 集群各个节点的 CentOS 系统内核版本:
## 载入公钥 $ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org ## 安装 ELRepo 最新版本$ yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm ## 列出可以使用的 kernel 包版本 $ yum list available --disablerepo=* --enablerepo=elrepo-kernel ## 安装指定的 kernel 版本: $ yum install -y kernel-lt-4.4.231-1.el7.elrepo --enablerepo=elrepo-kernel## 设置开机从新内核启动$ grub2-set-default "CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)"## 查看内核启动项 $ grub2-editenv list saved_entry=CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)重启系统使内核生效:$ reboot启动完成查看内核版本是否更新:$ uname -r 4.4.231-1.el7.elrepo.x86_64
参考:http://www.mydlq.club/article/78/
部署NFS服务,添加为k8s默认storageclass
nfs服务端安装
使用 yum 安装 NFS 安装包。$ sudo yum install nfs-utils注意只安装 nfs-utils 即可,rpcbind 属于它的依赖,也会安装上。服务端配置设置 NFS 服务开机启动$ sudo systemctl enable rpcbind $ sudo systemctl enable nfs启动 NFS 服务$ sudo systemctl start rpcbind $ sudo systemctl start nfs配置共享目录服务启动之后,我们在服务端配置一个共享目录$ sudo mkdir /data $ sudo chmod 755 /data根据这个目录,相应配置导出目录$ sudo vi /etc/exports添加如下配置/data/ 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)/data: 共享目录位置。
192.168.0.0/24: 客户端 IP 范围,* 代表所有,即没有限制。
rw: 权限设置,可读可写。
sync: 同步共享目录。
no_root_squash: 可以使用 root 授权。
no_all_squash: 可以使用普通用户授权。
:wq 保存设置之后,重启 NFS 服务。$ sudo systemctl restart nfs可以检查一下本地的共享目录$ showmount -e localhost Export list for localhost: /data 192.168.0.0/24这样,服务端就配置好了,接下来配置客户端,连接服务端,使用共享目录。
为k8s添加动态PV
#编辑自定义配置文件:
$ vim /etc/kubeasz/roles/cluster-storage/defaults/main.yml
# 比如创建nfs provisioner
storage:nfs:enabled: "yes"server: "192.168.1.8"server_path: "/data/nfs"storage_class: "nfs-dynamic-class"provisioner_name: "nfs-provisioner-01"
#创建 nfs provisioner
$ docker exec -it kubeasz bash
$ ansible-playbook /etc/kubeasz/roles/cluster-storage/cluster-storage.yml
$ kubectl patch storageclass nfs-dynamic-class -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
# 执行成功后验证
$ kubectl get pod --all-namespaces |grep nfs-prov
kube-system nfs-provisioner-01-6b7fbbf9d4-bh8lh 1/1 Running 0 1d
注意 k8s集群可以使用多个nfs provisioner,重复上述步骤1、2:修改使用不同的nfs server nfs_storage_class nfs_provisioner_name后执行创建即可。
开始部署Kubesphere 3.1.1正式版本
参考:https://github.com/kubesphere/ks-installer
准备工作
集群现有的可用内存至少在 10G
以上。 如果是执行的 allinone
安装,那么执行 free -g
可以看下可用资源
$ free -gtotal used free shared buff/cache available
Mem: 16 4 10 0 3 2
Swap: 0 0 0
部署 KubeSphere
最小化快速部署
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/cluster-configuration.yaml# 查看部署进度及日志$ kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
部署完成后可执行如下命令查看控制台的服务端口,使用 IP:consolePort(default: 30880)
访问 KubeSphere UI 界面,默认的集群管理员账号为 admin/P@88w0rd
。
kubectl get svc/ks-console -n kubesphere-system
以上为最小化部署,如需开启更多功能,请参考如下步骤配置相关依赖:
安装可插拔功能组件
- 编辑 ClusterConfiguration 开启可插拔的功能组件:
#编辑k8s的clusterconfig,将未开启的日志收集、告警监控、devops等功能按需开启(对应enable设置为true)
kubectl edit cc ks-installer -n kubesphere-system
按功能需求编辑配置文件之后,退出等待生效即可,如长时间未生效请使用如下命令查看相关日志:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
使用ansible部署K8S1.18集群并使用Kubesphere 3.1.1实现devops、日志收集、灰度发布、告警监控相关推荐
- 利用Docker/Ansible实现轻量集群服务部署(视频演示+彩蛋)
周良伟 网易云信系统架构师 负责云信IM平台的架构设计和服务器研发团队 作者简介 今天和大家分享的主题是如何用Docker/Ansible来做轻量私有化的技术方案.首先,简单介绍一下所谓轻量私有化到底 ...
- Kubernetes 部署高可用集群(二进制,v1.18)下
高可用架构(扩容多Master架构) Kubernetes作为容器集群系统,通过健康检查+重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失效状 ...
- 如何部署一个Kubernetes集群
来源 | 无敌码农 责编 | 寇雪芹 头图 | 下载于视觉中国 在上一篇文章<Kubernetes和Docker的关系是什么?>中,和大家分享了关于Kubernetes的基本系统架构以及关 ...
- 二进制部署k8s1.18(下)
二进制部署相对其他部署方式来说要复杂一些,步骤比较多,为了避免篇幅过长,故拆分成了三篇: 二进制部署k8s1.18(上) 二进制部署k8s1.18(中) 二进制部署k8s1.18(下) 部署 kube ...
- kubernetes-1.11.0集群部署之master集群 (二)
kubernetes-1.11.0集群部署之master集群 (二) Master master 的组件有以下: 1. API ServerApi server提供HTTP/HTTPS RESTful ...
- 使用Minikube部署本地Kubernetes集群(二十九)
前言 使用Minikube部署本地k8s集群相对比较简单,非常推荐将其用于本地k8s开发环境,唯一麻烦点的仅仅是网络问题. 在本篇教程中,我们使用了国内的镜像来完成本地k8s集群的搭建.如果搭建过程中 ...
- 吊炸天!一行命令快速部署大规模K8S集群!!!
吊炸天!一行命令快速部署大规模K8S集群!!! 先决条件 请事先准备好几台服务器(测试环境虚拟机即可) 请事先设置好相同的root密码(方便同时操作多服务器) 请事先在Linux安装好docker 请 ...
- 使用 Docker Stack 部署多服务集群
使用 Docker Stack 部署多服务集群 前言 单机模式下,我们可以使用 Docker Compose 来编排多个服务,而在 上一篇文章 中介绍的 Docker Swarm 只能实现对单个服务的 ...
- innodb 集群_部署MySQL InnoDB集群以实现高可用性
innodb 集群 In this article, I am going to explain how we can deploy the MySQL InnoDB cluster. InnoDB ...
最新文章
- 机器学习——XGBoost大杀器,XGBoost模型原理,XGBoost参数含义
- XHProf的安装和使用(PHP性能测试神器)
- H5嵌入原生开发小结----兼容安卓与ios的填坑之路
- Sphinx编译docs文档
- 数据库过滤操作中 != 或者 指定操作数并不能改匹配到NULL值
- 大神云集!2019年谷歌博士奖学金获得者重磅问世,清华、上交大、港中文入选最多!...
- 树状数组 Binary Indexed Tree/Fenwick Tree
- c/c++入门教程 - 2.5 文件操作、fstream(write写文件、read读文件、ios::binary二进制文件读写)
- java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别
- 安卓10不支持qmc解码_百度云不限速下载,超级简单!亲测可用,IOS/安卓/电脑全支持...
- 简单的美团-web前端页面
- select * from a,b用法
- python将横转为竖_如何将视频从横屏转为竖屏?
- matlab图像的恢复
- 【10】AccessibilityService实现探探app的自动化喜欢和不喜欢+ [as 3.0如何打开层级调用uiautomatorviewer]
- C++语言递归实现求从n个数中选k个进行组合的组合数
- 计算机应用类专业综合知识模拟卷(七),计算机应用专业综合知识模拟试卷5
- 斯人若彩虹,遇上方知有——dbGet(一)
- java黑皮书25.18-19----(压缩与解压),带界面,概念版
- 【论文阅读】AD-GCL:Adversarial Graph Augmentation to Improve Graph Contrastive Learning
热门文章
- 登陆后,地址栏中有sessionid
- ARM学习之Cortex-A
- Matlab函数contourf
- 【C语言】05-C语言循环结构
- 戴尔服务器阵列装系统,戴尔服务器R720做Raid 0并安装VMware ESXi 6.7系统方法
- 16.13.5 使用ITERATE语句控制流程
- 采用链接分配方式进行外存分配时,可采用的两种形式及其特点。假定磁盘块大小为4K,对于128G的硬盘,其文件分配表FAT需占用多少存储空间?
- CF:E. Moving Chips【二维双dp + dp灵活交叉】
- 张雷博士谈IBM沃森背后的AI技术
- 内网信息收集(Windows)--本机信息收集