2022
04
JOBCHER BLOG
go Struct 结构体
go Struct 结构体 结构体是将零个或多个任意类型的变量,组合在一起的聚合数据类型,也可以看做是数据的集合。 声明结构体 1//demo_11.go 2package main 3 4import ( 5 "fmt" 6) 7 8type Person struct { 9 Name string 10 Age int 11} 12 13func main() { 14 var p1 Person 15 p1.Name = "Tom" 16 p1.Age = 30 17 fmt.Println("p1 =", p1) 18 19 var p2 = Person{Name:"Burke", Age:31} 20 fmt.Println("p2 =", p2) 21 22 p3 := Person{Name:"Aaron", Age:32} 23 fmt.Println("p2 =", p3) 24 25 //匿名结构体 26 p4 := struct { 27 Name string 28 Age int 29 } {Name:"匿名", Age:33} 30 fmt.
JOBCHER BLOG
go Slice切片语法
go Slice 切片语法 切片是一种动态数组,比数组操作灵活,长度不是固定的,可以进行追加和删除。 len() 和 cap() 返回结果可相同和不同。 声明切片 1//demo_7.go 2package main 3 4import ( 5 "fmt" 6) 7 8func main() { 9 var sli_1 [] int //nil 切片 10 fmt.Printf("len=%d cap=%d slice=%v\n",len(sli_1),cap(sli_1),sli_1) 11 12 var sli_2 = [] int {} //空切片 13 fmt.Printf("len=%d cap=%d slice=%v\n",len(sli_1),cap(sli_2),sli_2) 14 15 var sli_3 = [] int {1, 2, 3, 4, 5} 16 fmt.Printf("len=%d cap=%d slice=%v\n",len(sli_3),cap(sli_3),sli_3) 17 18 sli_4 := [] int {1, 2, 3, 4, 5} 19 fmt.
JOBCHER BLOG
go 基础知识
go 基础知识 目录结构 1├─ code -- 代码根目录 2│ ├─ bin 3│ ├─ pkg 4│ ├─ src 5│ ├── hello 6│ ├── hello.go bin 存放编译后可执行的文件。 pkg 存放编译后的应用包。 src 存放应用源代码。 Hello World 代码 1//在 hello 目录下创建 hello.go 2package main 3 4import ( 5 "fmt" 6) 7 8func main() { 9 fmt.Println("Hello World!") 10} 基础命令 1go build hello 2#在src目录或hello目录下执行 go build hello,只在对应当前目录下生成文件。 3go install hello 4#在src目录或hello目录下执行 go install hello,会把编译好的结果移动到 $GOPATH/bin。 5go run hello 6#在src目录或hello目录下执行 go run hello,不生成任何文件只运行程序。 7go fmt hello 8#在src目录或hello目录下执行 go run hello,格式化代码,将代码修改成标准格式。 数据类型 类型 表示 备注 字符串 string 只能用一对双引号("")或反引号(``)括起来定义,不能用单引号(’’)定义! 布尔 bool 只有 true 和 false,默认为 false。 整型 int8 uint8 int16 uint16 int32 uint32 int64 uint64 int uint 具体长度取决于 CPU 位数。 浮点型 float32 float64 常量声明 常量,在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。
JOBCHER BLOG
VSCode插件推荐=> Code Runner
VSCode 插件推荐=> Code Runner Run code snippet or code file for multiple languages: C, C++, Java, JavaScript, PHP, Python, Perl, Perl 6, Ruby, Go, Lua, Groovy, PowerShell, BAT/CMD, BASH/SH, F# Script, F# (.NET Core), C# Script, C# (.NET Core), VBScript, TypeScript, CoffeeScript, Scala, Swift, Julia, Crystal, OCaml Script, R, AppleScript, Elixir, Visual Basic .NET, Clojure, Haxe, Objective-C, Rust, Racket, Scheme, AutoHotkey, AutoIt, Kotlin, Dart, Free Pascal, Haskell, Nim, D, Lisp, Kit, V, SCSS, Sass, CUDA, Less, Fortran, Ring, and custom command
JOBCHER BLOG
ant build.xml 编写
ant build.xml 编写 生成 build.xml Eclipse 自动生成 Ant 的Build.xml 配置文件,生成的方法很隐蔽 选择你要生成Build.xml文件的项目,右键. Export-> General -> Ant Buildfiles . 点 Next,选择项目,再点Finish. 编写 build.xml 1<?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 3<!-- 每个构建文件对应一个项目。<project>标签时构建文件的根标签。它可以有多个内在属性,就如代码中所示,其各个属性的含义分别如下。 4(1) default表示默认的运行目标,这个属性是必须的。 5(2) basedir表示项目的基准目录。 6(3) name表示项目名。 7(4) description表示项目的描述。 8 --> 9<project default="build" name="Sort"> 10 <!-- 设置属性或文件路径,读取属性使用${property},value路径默认项目根目录 --> 11 <property file="ant/builds.properties" /> 12 13 <property name="src.dir" value="src/statics" /> 14 15 <property name="classes.dir" value="ant/classes" /> 16 17 <property name="lib.dir" value="lib" /> 18 19 <property name="dist.
JOBCHER BLOG
kubernetes 调度过程
k8s 调度过程 执行滚动升级 修改 deployment.yml 文件,追加 rollingUpdate 1# 部署应用 2apiVersion: apps/v1 3kind: Deployment 4metadata: 5 name: jobcher-blog-deployment 6 labels: 7 app: jobcher-blog 8spec: 9 replicas: 3 10 selector: 11 matchLabels: 12 app: jobcher-blog 13 minReadySeconds: 10 #准备10s 14 strategy: 15 type: RollingUpdate 16 rollingUpdate: 17 maxUnavailable: 1 #更新期间不少于3-1 18 maxSurge: 1 #更新期间不超过3+1 19 template: 20 metadata: 21 labels: 22 app: jobcher-blog 23 spec: 24 containers: 25 - name: jobcher-blog-pod 26 image: hub.
JOBCHER BLOG
Golang go build 编译不同版本
Golang go build 编译不同系统下的可执行文件 Mac 系统编译 1CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go 2CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go Linux 系统编译 1CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go 2CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go windows 系统编译 1SET CGO_ENABLED=0 SET GOOS=darwin3 SET GOARCH=amd64 go build test.go 2SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build test.go GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm
JOBCHER BLOG
记录一次上门打散工
记录一次上门打散工 壬寅年头磨难多 人间规则奈吾何 吟诗为把瘟神送 风起大江扬洪波 疫情减弱,遍邀亲友,无人相约,但闻昔日挚友,感怀往事邀吾往之。欲把殷勤牵挂诉,幸之。遂至友舍,诉之:帮忙装个监控吧~ 买物料 和朋友两个人出发,帮朋友邻居家装个监控,他这个监控是要求装在车库里,但是网线要从 4 楼下放下去。所以,我们首先要出门购买一下物料: 带 RJ45 接口监控 足够长的网线 走了 10000 多步人都走傻了~ 布线 这个没啥好说的,纯粹体力活,感谢朋友的暴风之锤,提高了工作效率,加快了项目进度 感谢 感谢朋友,给我这次项目实践和锻炼的机会让我认识到了自己的能力的不足~ 欢迎关注我的博客www.jobcher.com
JOBCHER BLOG
ansible 命令
ansible 命令 Inventory:Ansible 管理的主机信息,包括 IP 地址、SSH 端口、账号、密码等 Modules:任务均有模块完成,也可以自定义模块,例如经常用的脚本。 Plugins:使用插件增加 Ansible 核心功能,自身提供了很多插件,也可以自定义插件。例如 connection 插件,用于连接目标主机。 Playbooks:“剧本”,模块化定义一系列任务,供外部统一调用。Ansible 核心功能。 编辑主机清单 1[webservers] 2192.168.0.20 ansible_ssh_user=root ansible_ssh_pass=’200271200’ 3192.168.0.21 ansible_ssh_user=root ansible_ssh_pass=’200271200’ 4192.168.0.22 ansible_ssh_user=root ansible_ssh_pass=’200271200’ 5 6[dbservers] 710.12.0.100 810.12.0.101 1sed -i "s/#host_key_checking = .*/host_key_checking = False/g" /etc/ansible/ansible.cfg 命令行 1ansible all -m ping 2ansible all -m shell -a "ls /root" -u root -k 常用模块 在目标主机执行 shell 命令。 shell 1- name: 将命令结果输出到指定文件 2 shell: somescript.sh >> somelog.txt 3- name: 切换目录执行命令 4 shell: 5 cmd: ls -l | grep log 6 chdir: somedir/ 7- name: 编写脚本 8 shell: | 9 if [ 0 -eq 0 ]; then 10 echo yes > /tmp/result 11 else 12 echo no > /tmp/result 13 fi 14 args: 15 executable: /bin/bash copy 将文件复制到远程主机。 1- name: 拷贝文件 2 copy: 3 src: /srv/myfiles/foo.
JOBCHER BLOG
Ant中如何添加第三方jar包依赖
Ant 中如何添加第三方 jar 包依赖 如果使用 ant 进行 java 项目的编译部署,那怎么添加第三方 jar 包的依赖呢?方法如下: 在项目的根目录下创建 lib 目录,并把所有需要的第三方 jar 包放到此目录下。 在 build.xml 中依次添加:path、property,并在 javac 中添加 classpath,添加 unjar。完整配置如下: 1<?xml version="1.0" encoding="UTF-8"?> 2<project name="MyTool" default="build" basedir="."> 3 <description>The ant project to build MyTool.</description> 4 <property name="srcDir" location="src" description="源文件的存放目录" /> 5 <property name="libDir" location="lib" description="第三方jar包的存放目录" /> 6 <property name="antDir" location="ant" description="编译后所有文件存放的根目录" /> 7 <property name="binDir" location="${antDir}/bin" description="编译后class文件的存放目录" /> 8 <property name="jarDir" location="${antDir}/jar" description="打包后jar包的存放目录" /> 9 <property name="jarFile" location="${jarDir}/MyTool.
JOBCHER BLOG
k8s本地联调神器kt-connect
k8s 本地联调神器 kt-connect 转载自 Bboysoul’sBlog k8s 集群内部的服务网络怎么和我们本地网络打通。kt-connect 就是用来解决这个问题的 使用方法 下载安装什么的都很简单,一个二进制而已 1https://github.com/alibaba/kt-connect 如果你安装好了,那么直接使用下面的命令使用就好了 1sudo ktctl connect 当然也可以指定配置文件 1sudo ktctl --kubeconfig ~/.kube/local connect 执行完成之后,这个集群的所有svc都可以直接在本地解析,当然直接 ping pod 的 ip 也是可以的
JOBCHER BLOG
OpenELB:让k8s私有环境对外暴露端口
OpenELB:云原生负载均衡器插件 OpenELB 是一个开源的云原生负载均衡器实现,可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。 在 Kubernetes 中安装 OpenELB 1kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml 查看状态 1kubectl get po -n openelb-system 使用 kubectl 删除 OpenELB 1kubectl delete -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml 1kubectl get ns 配置 OpenELB 1kubectl edit configmap kube-proxy -n kube-system 2 3# 修改 网卡 4ipvs: 5 strictARP: true 重启组件 1kubectl rollout restart daemonset kube-proxy -n kube-system 为 master1 节点添加一个 annotation 来指定网卡: 1kubectl annotate nodes master1 layer2.openelb.kubesphere.io/v1alpha1="192.168.0.2" 创建地址池 layer2-eip.yaml 1apiVersion: network.
JOBCHER BLOG
kubernetes ansible自动化部署
kubernetes ansible 自动化部署 服务器规划 角色 IP 组件 k8s-master1 10.12.12.15 kube-apiserver kube-controller-manager kube-scheduler etcd k8s-master2 10.12.12.17 kube-apiserver kube-controller-manager kube-scheduler etcd k8s-02 10.12.12.22 kubelet kube-proxy docker etcd k8s-03 10.12.12.21 kubelet kube-proxy docker etcd load Balancer(master) 10.12.12.15 10.12.12.23(VIP) nginx keepalived load Balancer(backup) 10.12.12.17 nginx keepalived 系统初始化 关闭 selinux,firewalld 关闭 swap 时间同步 写 hosts ssh 免密(可选) etcd 集群部署 生成 etcd 证书 部署三个 ETC 集群 查看集群状态 部署 Masterß 生成 apiserver 证书 部署 apiserver、controller-manager 和 scheduler 组件 启动 TLS Bootstrapping 部署 Node 安装 Docker 部署 Kubelet 和 kube-proxy 在 Master 上运行为新 Node 颁发证书 授权 apiserver 访问 kubelet 部署插件(准备好镜像) Flannel Web UI CoreDNS Ingress Controller Master 高可用 增加 Master 节点(与 Master1 一致) 部署 nginx 负载均衡器 Nginx+Keepalived 高可用 修改 Node 连接 VIP
03
JOBCHER BLOG
Git 规则
Git 飞行规则(Flight Rules) 编辑提交(editting commits) 我刚才提交了什么? 我的提交信息(commit message)写错了 我提交(commit)里的用户名和邮箱不对 我想从一个提交(commit)里移除一个文件 我想删除我的的最后一次提交(commit) 删除任意提交(commit) 我尝试推一个修正后的提交(amended commit)到远程,但是报错: 我意外的做了一次硬重置(hard reset),我想找回我的内容 暂存(Staging) 我需要把暂存的内容添加到上一次的提交(commit) 我想要暂存一个新文件的一部分,而不是这个文件的全部 我想把在一个文件里的变化(changes)加到两个提交(commit)里 我想把暂存的内容变成未暂存,把未暂存的内容暂存起来 未暂存(Unstaged)的内容 我想把未暂存的内容移动到一个新分支 我想把未暂存的内容移动到另一个已存在的分支 我想丢弃本地未提交的变化(uncommitted changes) 我想丢弃某些未暂存的内容 分支(Branches) 我从错误的分支拉取了内容,或把内容拉取到了错误的分支 我想扔掉本地的提交(commit),以便我的分支与远程的保持一致 我需要提交到一个新分支,但错误的提交到了 main 我想保留来自另外一个 ref-ish 的整个文件 我把几个提交(commit)提交到了同一个分支,而这些提交应该分布在不同的分支里 我想删除上游(upstream)分支被删除了的本地分支 我不小心删除了我的分支 我想删除一个分支 我想从别人正在工作的远程分支签出(checkout)一个分支 Rebasing 和合并(Merging) 我想撤销 rebase/merge 我已经 rebase 过, 但是我不想强推(force push) 我需要组合(combine)几个提交(commit) 安全合并(merging)策略 我需要将一个分支合并成一个提交(commit) 我只想组合(combine)未推的提交(unpushed commit) 检查是否分支上的所有提交(commit)都合并(merge)过了 交互式 rebase(interactive rebase)可能出现的问题 这个 rebase 编辑屏幕出现’noop’ 有冲突的情况 Stash 暂存所有改动 暂存指定文件 暂存时记录消息 使用某个指定暂存 暂存时保留未暂存的内容 杂项(Miscellaneous Objects) 克隆所有子模块 删除标签(tag) 恢复已删除标签(tag) 已删除补丁(patch) 跟踪文件(Tracking Files) 我只想改变一个文件名字的大小写,而不修改内容 我想从 Git 删除一个文件,但保留该文件 配置(Configuration) 我想给一些 Git 命令添加别名(alias) 我想缓存一个仓库(repository)的用户名和密码 我不知道我做错了些什么 其它资源(Other Resources) 书(Books) 教程(Tutorials) 脚本和工具(Scripts and Tools) GUI 客户端(GUI Clients) 编辑提交(editting commits) 我刚才提交了什么?
JOBCHER BLOG
shell 脚本(1)
shell 脚本之变量 变量替换 语法 说明 ${变量名#匹配规则} 从变量开头进行规则匹配,将符合最短的数据删除 ${变量名##匹配规则} 从变量开头进行规则匹配,将符合最长的数据删除 ${变量名%匹配规则} 从变量尾部进行规则匹配,将符合最短的数据删除 ${变量名%%匹配规则} 从变量尾部进行规则匹配,将符合最长的数据删除 ${变量名/旧字符串/新字符串} 变量内容符合旧字符串则,则第一个旧字符串会被新字符串取代 ${变量名//旧字符串/新字符串} 变量内容符合旧字符串则,则全部的旧字符串会被新字符串取代 字符串处理 计算字符串长度 - 语法 说明 方法一 ${#string} 无 方法二 expr length “$string” string 有空格,则必须加双引号 获取子串在字符串中的索引位置 语法: expr index $string $substring 计算子串长度 语法: expr match $string substr 抽取子串 ${string:position} :从 string 中的 position 开始 ${string:position:length}:从 position 开始,匹配长度为 length ${string:-position}:从右边开始匹配 ${string:(position)}:从左边开始匹配 expr substr $string $position $length:从 position 开始,匹配长度为 length
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
02
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.
JOBCHER BLOG
linux常用命令
linux 常用命令 软件操作命令 1#软件包管理器 2yum 3# 安装软件 4yum install xxxx 5# 卸载软件 6yum remove xxx 7# 搜索软件 8yum search xxx 9# 清理缓存 10yum clean packages 11# 列出已安装 12yum list 13# 软件包信息 14yum info 服务器硬件资源和磁盘操作 1# 内存 2free -h 3# 硬盘 4df -h 5# 负载 6w/top/htop 7# 查看cpu 8cat /proc/cpuinfo 9# 查看磁盘 10fdisk -l 文件和文件夹操作命令 命令 解释 ls 查看目录下的文件 touch 新建文件 mkdir 新建目录 cd 进入目录 rm 删除文件和目录 cp 复制 mv 移动 pwd 显示路径 系统用户操作命令 防火墙相关设置 提权操作 sudo 和文件传输
JOBCHER BLOG
linux基础知识
linux 基础知识 1、简述 Linux 权限划分原则。 给文件或目录分配权限时,先考虑所有者和所属组 遵循最小化权限,用啥权限给啥权限 修改目录和子文件归属权限,注意递归 文件权限分配是最常用的安全防护手段 2、当用户 user1,对/testdir 目录有写和执行权限时,该目录下的只读文件 file1 是否可修改和删除? 对 file1 不能修改也不能删除。(如果对目录有写权限和执行权限,则对 file1 不能修改可以删除) 3、如果一个系统没有任何的备份策略,请写出一个较为全面合理的备份方案! 增量备份:将相较于前一天增加的内容备份,适合每天改变量较大的数据。 差异备份:将相较于第一天改变的内容备份,适合原始数据量比较大,但是之后改变的比较小,即使中间哪一天的丢了也没事,只要最后一天,和第一天的在就行。 4、网站服务器每天产生的日志数量较大,请问如何备份? 使用 logrotate 滚动日志 split 大文件切分处理 shell 脚本处理日志 5、简述 Raid 0、Raid 1、Raid 5 的特点与原理。 RAID 等级 最少硬盘 最大容错 可用容量 读取性能 写入性能 安全性 目的 应用产业 单一硬盘 (参考) 0 1 1 1 无 JBOD 1 0 n 1 1 无(同 RAID 0) 增加容量 个人(暂时) 存储备份 0 2 0 n n n 一个硬盘异常,全部硬盘都会异常 追求最大容量、速度 视频剪接缓存用途 1 2 n-1 1 n 1 高,一个正常即可 追求最大安全性 个人、企业备份 5 3 1 n-1 n-1 n-1 中下至中 追求最大容量、最小预算 个人、小型企业备份 6 4 2 n-2 n-2 n-2 中至中高,仅安全性较 RAID 5 高 同 RAID 5,但较安全 个人、企业备份 10 4 高 综合 RAID 0/1 优点,理论速度较快 大型数据库、服务器 50 6 高 提升资料安全 60 8 高 提升资料安全 6、简述 Raid6、Raid 10 的特点与原理。 与 RAID 5 相比,RAID 6增加第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,任意两块磁盘同时失效时不会影响数据完整性。RAID 6 需要分配给奇偶校验信息更大的磁盘空间和额外的校验计算,相对于 RAID 5 有更大的 IO 操作量和计算量,其“写性能”强烈取决于具体的实现方案,因此RAID 6通常不会通过软件方式来实现,而更可能通过硬件方式实现。
JOBCHER BLOG
网心云挂机教程 | 轻松实现睡后收入~
网心云挂机教程 | 轻松实现睡后收入~ 首先,本文章只是分享,造成一切的后果,博主概不负责!都是成年人了…… 我采用 docker 容器魔方来挂载网心云 docker 部署 /mnt/money/wxedge_storage这个路径改为自己的存储路径建议>200G 1docker run \ 2--name=wxedge \ 3--restart=always \ 4--privileged \ 5--net=host \ 6--tmpfs /run \ 7--tmpfs /tmp \ 8-v /mnt/money/wxedge_storage:/storage:rw \ 9-d \ 10registry.cn-hangzhou.aliyuncs.com/onething/wxedge 设备绑定 进入 dockerip 地址 (http://127.0.0.1:18888) 下载 app 扫码绑定 成功 然后坐等第二天收益到账就可以了,记得19:00-23:00是收益高峰期尽量保持在线~