JOBCHER BLOG
kubernetes 脚本快速安装
kubernetes 脚本快速安装 1、三台机器设置自己的 hostname(不能是 localhost) 1# 修改 hostname; k8s-01要变为自己的hostname 2hostnamectl set-hostname k8s-01 3# 设置 hostname 解析 4echo "127.0.0.1 $(hostname)" >> /etc/hosts 2、所有机器批量执行如下脚本 1#先在所有机器执行 vi k8s.sh 2# 进入编辑模式(输入i),把如下脚本复制 3# 所有机器给脚本权限 chmod +x k8s.sh 4#执行脚本 ./k8s.sh 1#/bin/sh 2 3#######################开始设置环境##################################### \n 4 5 6printf "##################正在配置所有基础环境信息################## \n" 7 8 9printf "##################关闭selinux################## \n" 10sed -i 's/enforcing/disabled/' /etc/selinux/config 11setenforce 0 12printf "##################关闭swap################## \n" 13swapoff -a 14sed -ri 's/.*swap.*/#&/' /etc/fstab 15 16printf "##################配置路由转发################## \n" 17cat <<EOF | sudo tee /etc/modules-load.
JOBCHER BLOG
Maven 安装编译
Maven 安装编译 Maven 就是专门为 Java 项目打造的管理和构建工具,它的主要功能有: 提供了一套标准化的项目结构; 提供了一套标准化的构建流程(编译,测试,打包,发布……); 提供了一套依赖管理机制。 默认结构: 1a-maven-project 2├── pom.xml 3├── src 4│ ├── main 5│ │ ├── java 6│ │ └── resources 7│ └── test 8│ ├── java 9│ └── resources 10└── target 项目的根目录a-maven-project是项目名, 它有一个项目描述文件pom.xml, 存放Java源码的目录是src/main/java, 存放资源文件的目录是src/main/resources, 存放测试源码的目录是src/test/java, 存放测试资源的目录是src/test/resources, 最后,所有编译、打包生成的文件都放在target目录里。 这些就是一个 Maven 项目的标准目录结构。 pom.xml 文件: 1<project ...> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.itranswarp.learnjava</groupId> 4 <artifactId>hello</artifactId> 5 <version>1.0</version> 6 <packaging>jar</packaging> 7 <properties> 8 ... 9 </properties> 10 <dependencies> 11 <dependency> 12 <groupId>commons-logging</groupId> 13 <artifactId>commons-logging</artifactId> 14 <version>1.
JOBCHER BLOG
Nodejs 安装编译
Nodejs 安装编译 Node.js 平台是在后端运行 JavaScript 代码,必须首先在本机安装 Node 环境。 安装 Node.js 安装 npm npm 其实是 Node.js 的包管理工具(package manager)。
JOBCHER BLOG
ruoyi-cloud docker部署
基础环境安装 1# docker 脚本安装 2curl -sSL https://get.daocloud.io/docker | sh 3 4#docker compose 脚本安装 5curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 6 7 8#可执行权限 9sudo chmod +x /usr/local/bin/docker-compose 10#创建软链: 11sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 12#测试是否安装成功 13docker-compose --version 下载安装 1git clone https://gitlab.sanjiang.com/it-group/ruoyi-cloud.git 编译 1cd ruoyi-cloud 2mvn clean install -DskipTests 复制 jar 包 1cd ./docker 2./copy.sh 部署 docker 1./deploy.sh base 2./deploy.sh modules 检查 docker 1docker ps -a | grep ruoyi 2docker logs -f ruoyi-auth 3docker logs -f ruoyi-gateway 4docker logs -f ruoyi-modules-system
JOBCHER BLOG
git版本控制
git 版本控制 版本回退 1.查看 git 提交历史 1#查看git提交历史 2git log 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数 1git log --pretty=oneline 2.回退到上一个版本 Git必须知道当前版本是哪个版本,在 Git 中,用HEAD表示当前版本,也就是最新的提交b534d741..(注意我的提交 ID 和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上 100 个版本写 100 个^比较容易数不过来,所以写成HEAD~100 1git reset --hard HEAD^ 最新的那个版本已经看不到了,可以顺着往上找,找到那个版本的 ID 1git reset --hard c8275ca Git 在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git 仅仅是把HEAD从指向update 1┌────┐ 2│HEAD│ 3└────┘ 4 │ 5 └──> ○ update 6 │ 7 ○ Create README.md 8 │ 9 ○ init 改为指向 Create README.md: 1┌────┐ 2│HEAD│ 3└────┘ 4 │ 5 │ ○ update 6 │ │ 7 └──> ○ Create README.
JOBCHER BLOG
Linux crontab 命令
Linux crontab 命令 Linux crontab是用来定期执行程序的命令。 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置 语法 1crontab [ -u user ] file 2crontab [ -u user ] { -l | -r | -e } 说明: crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。 -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。 参数说明: -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) -r : 删除目前的时程表 -l : 列出目前的时程表 时间格式如下: 1f1 f2 f3 f4 f5 program 2* * * * * 3- - - - - 4| | | | | 5| | | | +----- 星期中星期几 (0 - 6) (星期天 为0) 6| | | +---------- 月份 (1 - 12) 7| | +--------------- 一个月中的第几天 (1 - 31) 8| +-------------------- 小时 (0 - 23) 9+------------------------- 分钟 (0 - 59) 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推 当 f1 为 a, b, c,.
JOBCHER BLOG
linux 网络测速
linux 网络测速 一键测试脚本bench.sh 适用于各种 Linux 发行版的网络(下行)和 IO 测试: 显示当前测试的各种系统信息 取自世界多处的知名数据中心的测试点,下载测试比较全面 支持 IPv6 下载测速 IO 测试三次,并显示平均值 1wget -qO- bench.sh | bash 2#或者下面这命令下载执行 3curl -Lso- bench.sh | bash 欢迎关注我的博客www.jobcher.com
JOBCHER BLOG
docker 命令(2)
docker 命令(2) docker ps 命令 docker ps 能查看所有运行中的容器 docker ps -a 能查看所有的容器 docker rm -f $(docker ps -aq) 强制删除所有容器 docker run和docker create有什么区别 docker create命令能够基于镜像创建容器。 该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。 但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。 事实上,docker create 命令常用于在启动容器之前进行必要的设置。
JOBCHER BLOG
CICD 概念
CICD 概念 DevOps Devlopment 和 Operation 的组合词 规划-》代码-》构建-》测试-》发布-》部署-》运营-》监控-》再次规划 devOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。 DevOps 希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗。更加高效的协同工作。良好的闭环可以大大增加整体的产出。 CICD 持续集成 持续部署 持续集成 持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。“持续集成”源自于极限编程(XP),是 12 最初的 12 种实践之一 Ci 需要具备这些: 1全面的自动化测试,这是实践持续集成和持续部署的基础,同时,选择合适的自动化测试工具也极其重要; 2灵活的基础设施。容器,虚拟化的存在让开发人员和QA不必再大费周折 3版本控制工具。如git,cvs,svn等 4自动化的构建和软件发布流程工具,如 Jenkins,flow.ci; 5反馈机制,如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。
JOBCHER BLOG
git使用方法
git 使用方法 一、git 安装配置 Debian/Ubuntu 1 apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ 2 libz-dev libssl-dev 3 4 apt-get install git 5 6 git --version 7 git version 1.8.1.2 Centos/RedHat 1 yum install curl-devel expat-devel gettext-devel \ 2 openssl-devel zlib-devel 3 4 yum -y install git-core 5 6 git --version 7 git version 1.7.1 二、git 拉取异常如何重新拉取 1.同一文件有修改,产生冲突。 先将本地修改存储起来 使用git stash命令,这样本地的所有修改就都被暂时存储起来 。其中stash@{0}就是刚才保存的标记。后续可以通过此标记访问。 再次拉取代码 1git pull 还原暂存的内容 1git stash pop stash@{0} 解决冲突 在存在冲突的文件中,Updated upstream 和=====之间的内容为拉取下来的代码,=====和stashed changes之间的内容就为本地修改的代码。解决完成之后,就可以正常的提交了。 5.
JOBCHER BLOG
kubernetes面试题汇总
kubernetes 面试题汇总 1、 k8s 是什么?请说出你的了解? 答:Kubenetes 是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。 K8S 是 Google 公司推出的,它来源于由 Google 公司内部使用了 15 年的 Borg 系统,集结了 Borg 的精华。 2、 K8s 架构的组成是什么? 答:和大多数分布式系统一样,K8S 集群至少需要一个主节点(Master)和多个计算节点(Node)。 主节点主要用于暴露 API,调度部署和节点的管理; 计算节点运行一个容器运行环境,一般是 docker 环境(类似 docker 环境的还有 rkt),同时运行一个 K8s 的代理(kubelet)用于和 master 通信。计算节点也会运行一些额外的组件,像记录日志,节点监控,服务发现等等。计算节点是 k8s 集群中真正工作的节点。 1K8S架构细分: 21、Master节点(默认不参加实际工作): 3 4Kubectl:客户端命令行工具,作为整个K8s集群的操作入口; 5Api Server:在K8s架构中承担的是“桥梁”的角色,作为资源操作的唯一入口,它提供了认证、授权、访问控制、API注册和发现等机制。客户端与k8s群集及K8s内部组件的通信,都要通过Api Server这个组件; 6Controller-manager:负责维护群集的状态,比如故障检测、自动扩展、滚动更新等; 7Scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的node节点上; 8Etcd:担任数据中心的角色,保存了整个群集的状态; 92、Node节点: 10Kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理,一般运行在所有的节点,是Node节点的代理,当Scheduler确定某个node上运行pod之后,会将pod的具体信息(image,volume)等发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向master返回运行状态。(自动修复功能:如果某个节点中的容器宕机,它会尝试重启该容器,若重启无效,则会将该pod杀死,然后重新创建一个容器); 11Kube-proxy:Service在逻辑上代表了后端的多个pod。负责为Service提供cluster内部的服务发现和负载均衡(外界通过Service访问pod提供的服务时,Service接收到的请求后就是通过kube-proxy来转发到pod上的); 12container-runtime:是负责管理运行容器的软件,比如docker 13Pod:是k8s集群里面最小的单位。每个pod里边可以运行一个或多个container(容器),如果一个pod中有两个container,那么container的USR(用户)、MNT(挂载点)、PID(进程号)是相互隔离的,UTS(主机名和域名)、IPC(消息队列)、NET(网络栈)是相互共享的。我比较喜欢把pod来当做豌豆夹,而豌豆就是pod中的container; 3、 容器和主机部署应用的区别是什么? 答:容器的中心思想就是秒级启动;一次封装、到处运行;这是主机部署应用无法达到的效果,但同时也更应该注重容器的数据持久化问题。 另外,容器部署可以将各个服务进行隔离,互不影响,这也是容器的另一个核心概念。 4、请你说一下 kubenetes 针对 pod 资源对象的健康监测机制? 答:K8s 中对于pod资源对象的健康状态检测,提供了三类probe(探针)来执行对 pod 的健康监测: livenessProbe探针 可以根据用户自定义规则来判定 pod 是否健康,如果 livenessProbe 探针探测到容器不健康,则 kubelet 会根据其重启策略来决定是否重启,如果一个容器不包含 livenessProbe 探针,则 kubelet 会认为容器的 livenessProbe 探针的返回值永远成功。 ReadinessProbe探针
JOBCHER BLOG
Kubernetes 安装
Kubernetes 安装 环境配置 关闭防火墙: 如果是云服务器,需要设置安全组策略放行端口 1systemctl stop firewalld 2systemctl disable firewalld 修改 hostname 1hostnamectl set-hostname k8s-01 2echo "127.0.0.1 $(hostname)" >> /etc/hosts 3reboot 关闭 selinux: 1sed -i 's/enforcing/disabled/' /etc/selinux/config 2setenforce 0 关闭 swap: 1swapoff -a 2sed -ri 's/.*swap.*/#&/' /etc/fstab 修改 /etc/sysctl.conf 1# 如果有配置,则修改 2sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf 3sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf 4sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf 5sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf 6sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf 7sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf 8sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf 9# 可能没有,追加 10echo "net.