自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(247)
  • 资源 (3)
  • 收藏
  • 关注

原创 k8s-statefulSet

在开始之前,我们先准备两个1G的存储卷PV[root@master1 ~]# cat pv.yaml apiVersion: v1kind: PersistentVolumemetadata: name: pv001spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: /tmp/pv001---apiVersion: v1kind: Persisten

2022-05-11 13:39:59 422

原创 k8s-statefulSet控制器

前面我们学习了Deployment和replicaSet 两种资源对象使用,在实际使用过程中,deployment并不能编排所有类型的应用,对无状态服务编排是非常容易的,但是对于有状态服务就无能为力了。我们需要先明白,什么事有状态服务,什么是无状态服务无状态服务: stateless service 改服务运行的实例不会在班底存储需要持久化的数据,并且多个实例对于同一个请求响应的结果完全一致的,我们是不是可以同事启动多个实例,但是我们访问任意一个实例得到的结果都是一样的,因为他唯一需要持久化的数据是存储

2022-05-11 10:44:11 122

原创 k8s-deployment滚动更新

deployment最突出的一个功能是支持滚动更新,比如我们需要吧应用容器更改为nginx:1.7.9版本,修改后的资源清单[root@master1 ~]# cat nginx-strategy-deployment.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-strategy-deployment namespace: defaultspec: replicas: 4 selector

2022-05-10 14:19:41 2993

原创 k8s deploymen控制器

前面介绍了rs控制器,replicaSet ,了解到该控制器是用来维护集群中进行的pod数量的,但是往往在实际操作的时候,我们反而不会去直接使用rs,而是会使用更上层的控制器,deployment是一个非常重要的功能就是实现了pod的滚动更新,比如我们应用更新了,我们值需要更新我们的容器镜像,然后丢该deployment里面的pod模板镜像,那么deployment就会用滚动更新rolling update的方式升级现在的pod,这个能力是非常重要的,因为对于线上的服务我们需要做到不中断服务,所以滚动更新就

2022-05-07 17:59:13 909

原创 k8s -replication controller

replication controller简称rc,实际上rc和rs的功能几乎是一致的,rs算是对rc的改进,目前唯一的区别RC只支持基于等式的selector ,但rs还支持基于集合的selector,这对复杂的运维管理就非常方便了。RC只支持单个label的等式,rs中的label selectos支持matchlabels和matchexpressions两种形式selector: matchLables: app: nginxselector: matchExpre

2022-05-07 16:01:21 878

原创 k8s-replicaset控制器

前面我们一起学习了pod的原理和一些基本使用,但是在实际使用的时候并不会直接使用pod,而是会使用各种控制器来满足我们的需求,kubernetes中运行了一系列控制器来确保集群的当前转台与期望状态保持一致,他们就是kubernetes的大脑,例如,replicaset控制器负责维护集群汇总运行的pod数量,node控制器负责监控节点的状态,并在节点出现故障时及时作出相应,总而言之,在kubernetes中,每个控制器只负责某种类型的特定资源。控制器 kubernetes控制器会监听资源的 创建/更新/.

2022-05-07 15:41:20 785

原创 Downward API

前面我们从pod的原理到生命周期介绍了pod的一些使用,作为kubernetes中最核心的对象,最基本的调度单元,我们可以发现pod中的属性还是非常繁多的,前面我们使用过一个volumes的属性,表示声明一个数据卷,我们可以通过命令kubectl explain pod.sec.volumes去查看该对象下面的属性非常多,前面我们只是简单的使用了hostpath和empryDir{}这两种模式,其中还有一种叫做downwardAPI这个模式和其他模式不一样的地方在于它不是为了存放容器的数据也不是用来进行容器

2022-04-28 17:40:51 1507

原创 POD声明周期

前面我们已经了解了POD的设计原理,接下来我们了解POD的声明周期,init container,pod hook,health 三个部分首先介绍pod的声明周期之前,我们先了解一下pod的状态,因为pod状态可以反应出当前我们的pod具体状态信息。[root@master1 ~]# kubectl explain pod.statusKIND: PodVERSION: v1RESOURCE: status <Object>DESCRIPTION: ..

2022-04-24 17:41:34 2054

原创 k8s启动过程和pad说明

[root@master1 ~]# kubectl get nodesThe connection to the server 192.168.1.126:6443 was refused - did you specify the right host or port?开机后启动,发现通信的6443没起来,等一会[root@master1 ~]# kubectl get nodesUnable to connect to the server: net/http: TLS hand.

2022-04-23 17:50:05 1810

原创 k8s-yaml文件

kubernetes中部署容器化应用,yaml是专门用来写配置文件的语言,yaml是专门用来写配置文件的语言,非常简洁和强大。她的基本语法规则如下:大小写敏感使用缩进表示层级关系缩进时不允许使用tab键,只允许使用空格,新版可以使用tab缩进的空格数量不重要,只要相同层级的元素左对齐kubernetes中,我们只需要了解两种结构类型lists maps 列表 字典也就是说lists的maps 和maps的lists,maps我们都知道maps是字典,就是一个key:v

2022-04-22 17:43:36 1869

原创 k8s-yaml部署第一个nginx

kubectl是直接操作APTServer的,所以就相当于我们的清单提交给APIServer,然后集群获取到清单描述的应用信息后存入etcd数据库中,然后kube-scheduler组件发现一有一个pod还没绑定到节点上,就会对这个pod进行一系列的调度,把他调度到一个合适的节点上,这个合适可以是pod上约束也可以是node约束,后面讲。调度好后,把这个节点和pod绑定到一起,回写etcd,然后节点上的kubelet组件这个时候watch到一个pod被分配过来了,就去吧这个pod的信息拉取下来,然后根据

2022-04-22 15:18:11 4507

原创 k8s里pod rs deploy层级关系

[root@master1 ~]# kubectl get pod -n kubernetes-dashboardNAME READY STATUS RESTARTS AGEdashboard-metrics-scraper-7b59f7d4df-qr7gv 1/1 Running 0 139mkubernetes-dashboard-74d688b6bc-ktnwt.

2022-04-21 14:21:05 213

原创 给K8S安装一个bashboard

集群前一节已经创建好了[root@master1 ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml卸载recommended.yaml文件用于创建podkubectl apply -f recommended.yaml[root@master1 ~]# kubectl apply -f recommended.yaml nam...

2022-04-21 14:08:31 1124 1

原创 k8s部署--没到8次就学会了

机器三个[root@master1 ~]# cat /etc/hosts192.168.1.126 master1192.168.1.127 node1192.168.1.128 node2192.168.1.129 node3223.5.5.5命名规则和机器严格按照这个步骤。2CPU 2G 内存不然加node的时候会报错装完之后,静态ip,保证这三个电脑的网卡是一致的名字,网段。否则fannel的时候pod起不来就无法通信。IPADDR=192.168.1.% //一开始这

2022-04-20 16:05:29 1910

原创 Alios装一个docker

按步骤装太麻烦 但是这大哥他没有 支持Anolis OS 8.4[root@localhost ~]# cat /etc/os-releaseNAME="Anolis OS"VERSION="8.4"ID="centos"ID_LIKE="rhel fedora centos"VERSION_ID="8.4"PLATFORM_ID="platform:an8"PRETTY_NAME="Anolis OS 8.4"ANSI_COLOR="0;31"HOME_URL="https://o

2022-03-30 17:02:01 1443

原创 debian安装mysql

参考了这个大哥的(3条消息) debian 8 (jessie版) 下载解压安装mysql 5.7(版本5.7.25)_陈阿刚的博客-CSDN博客这个比较老,我的11装还是有问题,不过上面的思路还是比较正确的,不然我也装不过去首先先看一下apt 源里有什么mysql显然是什么都没有MySQL :: Download MySQL Community Server (Archived Versions)这个就只能手动了,然后我拿到包的时候手抖了一下,执行了一个dpkg -i *...

2022-03-30 15:09:22 2628

原创 debian的DNS问题

debian的DNS 修改了/etc/resolve.conf一直跳此时需要安装一个 resolveconfroot@master:/etc# apt install resolvconf然后修改下面的head文件root@master:/etc# vim /etc/resolvconf/resolv.conf.d/head 这样就不会一直跳了

2022-03-29 15:36:34 1621

原创 淘宝nginx编译安装

root@rancher:/opt/tnginx# ls -l -d -h *drwxrwxr-x 13 root root 4.0K 3月 29 2021 tengine-2.3.3-rw-r--r-- 1 root root 2.8M 3月 21 10:03 tengine-2.3.3.tar.gz获取一个包,然后吧他解压源代码内编辑脚本文件编译安装需要用到的,编译工具其中折腾了很多次,网易,阿里,华为换了一个遍。怎么都装不过去,移除也不行。apti.

2022-03-21 16:34:15 3692

原创 解决虚拟机里apt update 时源失效问题

root@rancher:~# apt-get update -y命中:1 http://mirrors.aliyun.com/debian buster InRelease获取:2 http://mirrors.aliyun.com/debian-security buster/updates InRelease [65.4 kB]获取:3 http://mirrors.aliyun.com/debian buster-updates InRelease [51.9 kB] .

2022-03-09 13:34:41 2584

原创 docker的网络模式

Bridge模式当docker进行启动时,会在主机创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式与物理交换机类似,这样主机上所有容器就通过交换机连在了一个二层网络中,从docker0子网中分配一个ip给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,docker将veth pair设备的一段放在新创建的容器中,命名eth0,另一端放在主机中,以veth##这样类似的名字命名,并将这个

2022-02-27 18:18:39 605

原创 docker的数据共享与持久化

docker容器中管理数据主要有两种方式数据卷data volumes 挂载主机目录 bind mouts数据卷 data volumes 是一个可供一个过个容器使用的特殊目录,他绕过UFS,可以提供跟多有用的特征。数据卷 可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新 不会影响镜像数据卷默认会一直存在 即使容器被删除数据卷的使用,类似linux下对目录或文件进行mount 镜像中的被指定为挂载点的目录中的文件会被隐藏掉,能显示看的是挂载的数据卷-v -mou

2022-02-27 14:20:22 243

原创 docker registry建一个自己的私有hub

有时候使用docker hub不方便,毕竟在国外,而且也有安全风险。所以我们就需要自己搭建一个registry,docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。docker run -d -p 5000:5000 --restart=always --name registry registry使用官方的registry镜像来启动私有仓库,默认情况下/var/lib/registry目录下。-v 可以指定目录,将镜像内的路径指向到本地docker

2022-02-24 17:33:27 2372

原创 docker hub上传一个自己制作的镜像

docker tag nginx:v3 gogodocker887/nginx:index 先发一个tag然后就可以准备推了没有dockerhub账号的需要去注册一下你的registry里面就有了一个image这样就可以通过dockerhub处理镜像了下一篇我们自己搭建一个私有的registry...

2022-02-24 15:29:07 2001

原创 dockerfile定制镜像

docker commit说到,制作镜像还是需要dockerfile,我们可以吧每一层修改,安装,构建,操作的命令都写入一个脚本,就是dockerfiledockerfile就是一个文本文件,其内包含了一条条 的指定,每一条构建一层,因此每一条指令的内容,就是描述改成应该如何构建。FROM 所谓定制镜像,即在一个镜像的基础上,进行定制。FROM是dockerfile第一个指令。docker hub,拉去一个基础的镜像,如果没有满意的,可以在官方镜像中选一个基础的操作系统镜像。还可以选空白镜.

2022-02-24 14:27:26 276

原创 ubuntu开机进入grub模式

有人开机突然进入到grub下这还不是救援模式,所以啥命令都没有,ls pwd没有。然后想到看一下是不是fstab挂载的问题,发现cat还可以用。有人说这是rescue,其实不是。normal可以切换到系统引导但是这时候突然图形挂了,F1切到字符,有重新安装了字符。接着需要修复grub了/etc/default/grub找一个正常的复制一份然后重新安装一下grubWelcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.11..

2022-02-24 14:05:49 7621

原创 docker commit定制镜像

镜像是容器的基础,每次执行docker run的时候都会指定哪个镜像作为容器运行的基础。定制一个镜像,镜像是多层存储,每一层是前一层的基础上进行的修改,而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。使用浏览器访问,可以看到nginx欢迎页面更换一下主页的内容修改了容器的文件,也就是改动了容器的存储层,我们可以通过docker diff看到具体改动docker exec -it ## /bin/bash //进入contain..

2022-02-22 15:31:27 96

原创 docker image管理

docker imagesdocker image ls列表包含了仓库名 标签 镜像ID 创建时间 以及所占空间 。镜像ID则是镜像唯一的表示,一个镜像可以有多个标签。镜像大小这里标识的所占空间和docker hub看到的镜像大小不同。docker hub中显示的体积是压缩后的体积,在镜像下载和上传镜像过程中镜像是保持压缩状态的,docker hub所显示的大小是网络传输中更关心的流量的大小。docker image ls /docker images显示的是镜像下载到本地后,.

2022-02-22 14:27:41 648

原创 debian安装docker

头一次在debian安装,记录一下首先需要一个debian其次你需要换一个debian的源,阿里,华为的都行,差别不大,因为后面下docker的时候都要去原厂拉先卸载原来的,不管有没有 sudo apt-get remove docker docker-engine docker.io containerd runc sudo apt-get update$ sudo apt-get install \ ca-certificates \ curl \

2022-02-21 15:22:48 7627 3

原创 golang复习实现流程循环if,比较三个数最大

package mainimport "fmt"func main() { a, b, c := 5, 9, 4 if a > b { if a > c { fmt.Println("a最大") } } else if b > c { fmt.Println("b最大") } else { fmt.Println("c最大") }}if 判断表达式返回结果bool值 {条件分支}else {}不需要break和...

2021-12-13 16:33:46 475

原创 golang中的协程同步

chan可以被关闭,尽管它们和文件不同,不必每次都关闭package mainimport ( "fmt" "time")func main() { ch := make(chan string) go sendData(ch) go getData(ch) time.Sleep(1e9)}func sendData(ch chan string) { ch <- "北京" ch <- "上海" ch <- "广州" ch <- "武汉" c

2021-11-27 16:44:57 371

原创 golang中channel的传递

需要注意的是,go语言中channel本省也是一个原生类型,与map之类的类型一样,因此channel本省在定义后也可以通过channel来传递可以使用这个特性来实现pipe特性,管道也是使用非常广泛的一种设计模式,比如在处理数据时,可以采用管道设计,这样可以比较容易以插件的方式增加数据的处理流程下面利用channel可被传递的特性来实现管道。type PipeData struct { value int handler func(int) int next cha

2021-11-27 14:35:30 2085

原创 golang并发编程协程

执行体是一个抽象的概念,在操作系统层面有多个概念与之对应,比如操作系统自己掌管的进程process ,进程内的线程 thread 以及进程内的协程coroutine也叫轻量级线程。与传统的系统线程和进程相比,协程的最大优势在于其轻量化,可以轻松创建上百万个协程而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万个。这就是协程也叫轻量级线程的原因 多数语言在语法层面并不直接支持协程,而是通过库的方式支持,但用库的方式支持的功能也并不完整,比如仅仅提供轻量级线程的创建,销毁与切换等能力。如果在这样..

2021-11-20 16:38:08 571

原创 golang闭包

package mainimport "fmt"func adder(x int)func(int) int { return func(y int)int { x+=y return x }}func main(){ret := adder(100)ret2 := ret(200)fmt.println(ret2)}定义了一个函数adder,参数数x int 类型,返回值是一个匿名函数func(int)int匿名函数的参数数int,返回值是int匿名函..

2021-11-04 16:55:27 77

原创 golang实现回文检测

package mainimport "fmt"func main() { ss := "山西运煤车煤运西山" a := []rune(ss) // fmt.Println(ss) // fmt.Println(a) for i := 0; i < len(a)/2; i++ { fmt.Println(i) if a[i] != a[len(a)-1-i] { fmt.Println("不是回文") return } else { fmt.Pri.

2021-11-01 14:40:24 262

原创 golang中字符串与数组,切片的转换

go语言将字符串作为一种原生的基本数据类型,字符串的初始化可以使用字符串的字面量var a = "hello,world"1) 字符串是常量,可以通过类似数组的索引访问其字节单元,但是不能修改某个字节的值var a = "hello,world"b := a[0]a[1]='a'package mainimport "fmt"func main() { var a = "hello , world" b := []byte(a)//此时打印b,以rane方式...

2021-10-28 17:53:01 5337 1

原创 2021-10-25

可以使用哪个函数来创建错误变量errors.New('Employee not found!')go中错误处理和日志记录与其他编程语言中的这些过程不同,go的错误处理方法非常简单,是有if条件,调用的函数应返回多个值。按照管理 最后一个返回值为错误,如果错误变量返回nil,则不存在错误。如果不为nil,则错在错误。只需要多次返回错误即可将错误传播到堆栈。可以创建为可重用为程序中常见错误消息的返回值 的错误变量。你还需要了解何时使用panic,我们已介绍了panic和recover的工作原..

2021-10-25 16:35:28 68

原创 golang中切片修改会影响原值

package mainimport "fmt"func main() { var array = [4]string{"beijing", "shanghai", "tianjing", "hangzhou"} fmt.Printf("%#v\n", array) slice := array[:] fmt.Printf("%#v\n", slice) slice1 := slice[2:4] fmt.Printf("%#v\n", slice1) slice1[1] = "南...

2021-10-22 15:02:09 626

原创 golang实现斐波那契

package mainimport "fmt"func fibonacci(n int) int { //定义函数,参数是n int类型,输出int类型,返回值是参数的前两个之和 if n < 2 { return n } return fibonacci(n-2) + fibonacci(n-1)}func main() { var i int //定义变量i for i = 0; i < 20; i++ { fmt.Printf("%d\t", fibon.

2021-10-22 11:49:18 383 1

原创 golang中使用控制流

package mainimport "fmt"func main() { cities := [...]string{"beijing", "shanghai", "guangzhou", "shenzhen"} fmt.Println(cities)}即使数组应具有5个元素,也无需为所有的元素分配值,如上所示,最新位置包含一个空的字符串,因为它是字符串数据类型的默认值如果你不知道你将需要多少个位置,但知道你将具有多少数据,可以使用省略号...输出没有空字符串,数组长度由.

2021-10-20 16:43:58 129

原创 golang使用defer panic recover 函数进行控制

让我们看看go特有的一些控制流,defer,panic,recover。defer函数go中,defer语句会推迟函数的运行,知道包含defer语句的函数完成,通常情况下,当你想要避免忘记任务是,可以推迟某个函数的运行。可以根据需要推迟任意多个函数,defer语句按逆序运行,先运行最后一个。package mainimport "fmt"func main() { for i := 1; i <= 4; i++ { defer fmt.Println("延迟输出", -i)

2021-10-20 13:58:05 147

lineage OS andriod 裸安卓的包

亲测有效,但是不能使用有线网络,

2022-06-23

lineage tv lineage tv lineage tv lineage tv

lineage tv 本人亲测排雷适用于树莓配系列

2022-06-23

LxRunOffline.7z

安装win10子系统插件

2021-02-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除