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是收益高峰期尽量保持在线~
清理Docker的container,image与volume
清理Docker的container,image与volume
清理 Docker 的 container,image 与 volume Docker 的镜像(image)、容器(container)、数据卷(volume), 都是由 daemon 托管的。 因此,在需要清理时,也需要使用其自带的手段。 清理技巧 清理所有停止运行的容器: 1docker container prune 2# or 3docker rm $(docker ps -aq) 清理所有悬挂(<none>)镜像: 1docker image prune 2# or 3docker rmi $(docker images -qf "dangling=true") 清理所有无用数据卷: 1docker volume prune 由于prune操作是批量删除类的危险操作,所以会有一次确认。 如果不想输入y<CR>来确认,可以添加-f操作。慎用! 清理停止的容器 docker rm -lv CONTAINER -l是清理 link,v是清理 volume。 这里的 CONTAINER 是容器的 name 或 ID,可以是一个或多个。 参数列表: Name shorthand Default Description –force,-f false Force the removal of a running container (uses SIGKILL) –link, -l false Remove the specified link –volumes, -v false Remove the volumes associated with the container 清理所有停止的容器 通过docker ps可以查询当前运行的容器信息。 而通过docker ps -a,可以查询所有的容器信息,包括已停止的。
JOBCHER BLOG
Jenkins 安装与使用
Jenkins 安装与使用 代码在本地修改—-》提交到远程 gitlab—-》触发 jenkins 整个自动化构建流程(打包,测试,发布,部署) 安装 docker 安装 docker docker 安装 jenkins 1docker run \ 2 -u root \ 3 -d \ 4 -p 8080:8080 \ 5 -p 50000:50000 \ 6 -v jenkins-data:/var/jenkins_home \ 7 -v /etc/localtime:/etc/localtime:ro \ 8 -v /var/run/docker.sock:/var/run/docker.sock \ 9 --restart=always \ 10 jenkinsci/blueocean 访问 http://localhost:8080 显示初始密码 1docker exec -ti <容器名称> sh 2cat /var/jenkins_home/secrets/initialAdminPassword 工作流程 先定义一个流水线项目,指定项目的 git 位置 git 位置自动拉取代码 解析拉取代码里面的 Jenkinsfile 文件 按照 Jenkinsfile 指定的流水线开始加工项目 Jenkinsfile 语法 基础语法,在仓库创建一个 Jenkinsfile 文件
JOBCHER BLOG
Navicat 查看导出连接的密码 | navicat查看密码方案
Navicat 查看密码方案 解决问题: 我们经常使用 navicat 连接数据库,有时候时间久了之后,会忘记之前的密码,那么现在我们有办法获得只要正常连接的数据库的密码 步骤: 导出连接 connections.ncx,拿到保存到本地的 connections.ncx 文件中的 Password,粘贴到下面的代码中 登陆https://tool.lu/coderunner/,使用 PHP 在线运行工具,粘贴下面添加密码后的代码 备用工具网址(https://zixuephp.net/tool-runcode.html) 1<?php 2class NavicatPassword 3{ 4 protected $version = 0; 5 protected $aesKey = 'libcckeylibcckey'; 6 protected $aesIv = 'libcciv libcciv '; 7 protected $blowString = '3DC5CA39'; 8 protected $blowKey = null; 9 protected $blowIv = null; 10 11 public function __construct($version = 12) 12 { 13 $this->version = $version; 14 $this->blowKey = sha1('3DC5CA39', true); 15 $this->blowIv = hex2bin('d9c7c3c8870d64bd'); 16 } 17 18 public function encrypt($string) 19 { 20 $result = FALSE; 21 switch ($this->version) { 22 case 11: 23 $result = $this->encryptEleven($string); 24 break; 25 case 12: 26 $result = $this->encryptTwelve($string); 27 break; 28 default: 29 break; 30 } 31 32 return $result; 33 } 34 35 protected function encryptEleven($string) 36 { 37 $round = intval(floor(strlen($string) / 8)); 38 $leftLength = strlen($string) % 8; 39 $result = ''; 40 $currentVector = $this->blowIv; 41 42 for ($i = 0; $i < $round; $i++) { 43 $temp = $this->encryptBlock($this->xorBytes(substr($string, 8 * $i, 8), $currentVector)); 44 $currentVector = $this->xorBytes($currentVector, $temp); 45 $result .
ProXmoX VE升级 apt-get update 报错
ProXmoX VE升级 apt-get update 报错
ProXmoX VE 升级 apt-get update 报错 解决方法 1vim /etc/apt/sources.list.d/pve-enterprise.list 2#注释掉 3#deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise 添加内容 1echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list 2wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg 更新系统 1apt update && apt dist-upgrade 结尾 升级完成后,可以执行pveversion -v查看下最新的软件版本。然后执行reboot重启物理服务器
JOBCHER BLOG
mysql 笔记(2)
mysql 学习笔记(2) mysql 主从复制 MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 MySQL 主从复制的主要用途 读写分离 数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换(主从切换) 高可用(HA) 架构扩展 MySQL 主从复制的原理 MySQL 主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点,如下图所示: 主节点 log dump 线程 当从节点连接主节点时,主节点会为其创建一个 log dump 线程,用于发送和读取 bin-log 的内容。在读取 bin-log 中的操作时,log dump 线程会对主节点上的 bin-log 加锁,当读取完成,在发送给从节点之前,锁会被释放。主节点会为自己的每一个从节点创建一个log dump 线程。 从节点 I/O 线程 当从节点上执行start slave命令之后,从节点会创建一个 I/O 线程用来连接主节点,请求主库中更新的 bin-log。I/O 线程接收到主节点的 blog dump 进程发来的更新之后,保存在本地relay-log(中继日志)中。 从节点 SQL 线程 SQL 线程负责读取 relay-log 中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。 对于每一个主从连接,都需要这三个进程来完成。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个log dump 进程,而每个从节点都有自己的I/O进程,SQL进程。从节点用两个线程将从主库拉取更新和执行分成独立的任务,这样在执行同步数据任务的时候,不会降低读操作的性能。比如,如果从节点没有运行,此时 I/O 进程可以很快从主节点获取更新,尽管 SQL 进程还没有执行。如果在 SQL 进程执行之前从节点服务停止,至少 I/O 进程已经从主节点拉取到了最新的变更并且保存在本地 relay 日志中,当服务再次起来之后,就可以完成数据的同步。
JOBCHER BLOG
Proxmox VE 在线扩容磁盘分区
Proxmox VE 在线扩容磁盘分区 添加磁盘大小 在 VM 上做扩容操作 安装 growpart 1yum install -y epel-release 2yum install -y cloud-utils 查看系统盘 路径 1fdisk -l 2df -h 扩容设备并重启 1growpart /dev/sda 2 #2代表是第二块系统分区,不是sda2,中间有空格 2reboot 重启执行命令 1xfs_growfs /dev/sda2 #(xfs 文件系统) 2resize2fs /dev/sda2 #(ext4 文件系统) 更新完成 1df -h 逻辑卷没有正常扩容的情况 检查当前逻辑卷属于哪个卷组: 1vgdisplay 检查卷组中是有足够的空间可以扩容,还有99g 扩展逻辑卷大小到200G: 1lvextend -L +99G /dev/mapper/ubuntu--vg-ubuntu--lv 调整文件系统大小到逻辑卷大小: 1resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 4. 检查 1df -h /dev/mapper/ubuntu--vg-ubuntu--lv 成功扩容