【Go学习笔记】常量相关
常量相关常量是一个简单值的标识符,在程序运行时,不会被修改的值。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。
12const b string = "abc" // 显式类型定义const b = "abc" // 隐式类型定义
多个相同类型的常量声明可以简写为
1const c_name1, c_name2 = value1, value2
示例:
1234567891011121314151617package mainimport "fmt"// 常量定义后可以不被使用// 定义全局级别常量const ( packageName string = "goLang" // 省略常量类型 packageMsg = "info")func main() { // 定义块级别常量 const a, b = "zhangsan ...
【Go学习笔记】数组相关
数组相关数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
在Go语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型,元素可以通过唯一的索引值访问,从0开始。
数组是很有价值的数据结构,因为它的内存分配是连续的,内存连续意味着可以让它在CPU缓存中待更久,所以迭代数组和移动元素都会非常迅速
数组的定义第一种,通过指定数据类型和元素个数(数组的长度)来声明数组
示例:
1234567func main() { // 定义一个长度为6的int类型数组 var array [6]int // 为前面定义的数组赋值,当对应索引未赋值时默认初始化数据类型的默认值 array = [6]int{1, 2, 3, 4, 5} // [1 2 3 4 5 0] fmt.Println(array)}
第二种,快速创建和初始化数组的方法是使用数组字面值。数组字面值允许我们声明我们需要的元素个数并指定数据类型。
示例:
1234 ...
阿里云ACK集群安装Kubesphere3.1
简介这里已经创建好ack集群,创建集群步骤跳过下面直接开始安装
查看Storage Class
您可以在阿里云容器服务 Kubernetes 集群中使用阿里云云盘存储卷。目前,阿里云 CSI 插件支持通过 PV/PVC 方式挂载云盘,包括静态存储卷和动态存储卷。
默认阿里云 ACK 已经为用户创建了不同规格的 StorageClass,可直接使用,但存在最小容量规格限制,详情参考云盘存储卷使用说明。
1234567# kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEalicloud-disk-available diskplugin.csi.alibabacloud.com Delete Immediate true 8m39salicloud-disk- ...
容器的核心技术:Cgroup和NameSpace
容器 = cgroup + namespace + rootfs + 容器引擎
Cgroup: 资源控制
namespace: 访问隔离
rootfs:文件系统隔离。镜像的本质就是一个rootfs文件
容器引擎:生命周期控制
一、Cgroup Cgroup 是 Control group 的简称,是 Linux 内核提供的一个特性,用于限制和隔离一组进程对系统资源的使用。对不同资源的具体管理是由各个子系统分工完成的。
Cgroup 可以对进程进行任意分组,如何分组由用户自定义。
子系统介绍
cpuset 子系统cpuset 可以为一组进程分配指定的CPU和内存节点。 cpuset 一开始用在高性能计算上,在 NUMA(non-uniform memory access) 架构的服务器上,通过将进程绑定到固定的 CPU 和内存节点上,来避免进程在运行时因跨节点内存访问而导致的性能下降。
cpuset 的主要接口如下:
cpuset.cpus: 允许进程使用的CPU列表
cpuset.mems: 允许进程使用的内存节点列表
cpu 子系统cpu 子系统用于限 ...
Helm3部署Yapi
Helm3部署Yapi添加Yapi的helm的repo仓库
123456$ helm repo add myrepo https://putianhui.github.io/helm-charts/"myrepo" has been added to your repositories$ helm repo list NAME URLmyrepo https://putianhui.github.io/helm-charts/
搜索查看Yapi的chart信息
123$ helm search repo yapiNAME CHART VERSION APP VERSION DESCRIPTION myrepo/yapi 0.0.1 1.9.2 yapi-1.9.2 & mogodb 4.2.1
通过指定chart的版本部署yapi
注意:这里用到了存储类,要提前创建好存储类,指定 persistence.storageClassName
123456$ helm install ...
ES集群7.12.3跨集群数据迁移
ES跨集群数据迁移根据业务需求,存在以下场景:
迁移过程中,旧的集群可以暂时停止服务或者暂停写入,数据全部迁移到新的集群中后,业务切换到新的集群进行读取和写入
迁移过程中,旧集群不能停止写入,业务不能停服
如果是第一种场景,数据迁移过程中可以停止写入,可以采用诸如elasticsearch-dump、logstash、reindex、snapshot等方式进行数据迁移。实际上这几种工具大体上可以分为两类:
scroll query + bulk: 批量读取旧集群的数据然后再批量写入新集群,elasticsearch-dump、logstash、reindex都是采用这种方式
snapshot: 直接把旧集群的底层的文件进行备份,在新的集群中恢复出来,相比较scroll query + bulk的方式,snapshot的方式迁移速度最快。
如果是第二种场景,数据迁移过程中旧集群不能停止写入,需要根据实际的业务场景解决数据一致性的问题:
如果业务不是直接写ES, 而是把数据写入到了中间件,比如业务->kafka->logstash->es的架构,此时可以直接采用 ...
Helm3安装ES集群7.13.2
Helm部署ES文档安装helm3.5.2
各版本下载地址:https://github.com/helm/helm/releases
下载最新的helm二进制包
1[root@k8s-01 ~]# wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
解压并移动二进制文件至可执行目录
12345678[root@k8s-01 ~]# tar xzvf helm-v3.5.2-linux-amd64.tar.gz linux-amd64/linux-amd64/helmlinux-amd64/LICENSElinux-amd64/README.md[root@k8s-01 ~]# chmod +x linux-amd64/helm [root@k8s-01 ~]# mv linux-amd64/helm /usr/bin/
验证安装
12[root@k8s-01 ~]# helm version version.BuildInfo{Version:"v3.5.2", GitCommit:&q ...
Ingress Annotations注解详解
Nginx Ingress注解AnnotationsNginx Ingress 注解使用在 Ingress 资源实例中,用以设置当前 Ingress 资源实例中 Nginx 虚拟主机的相关配置,对应配置的是 Nginx 当前虚拟主机的 server 指令域内容。在与 Nginx Ingress 配置映射具有相同功能配置时,将按照所在指令域层级遵循 Nginx 配置规则覆盖。
Nginx Ingress注解按照配置功能有如下分类。1、Nginx原生配置指令支持在注解中添加 Nginx 原生配置指令。配置说明如下表所示。
注解 类型 功能描述nginx.ingress.kubernetes.io/server-snippet string 在 server 指令域添加 Nginx 配置指令nginx.ingress.kubernetes.io/configuration-snippet string 在 location 指令域添加 Nginx 配置指令配置样例如下:
12345678910111213141516171819202122apiVersion: ext ...
NFS共享存储使用tail -f查看延迟问题
现象:
用户两台ECS挂载同一个NFS文件系统,在ECS-A上append写文件,在ECS-B用tail -f观察文件内容的变化。在ECS-A写完之后,在ECS-B看到文件内容变化会有10-30秒的延时。然而相同的场景下,如果直接在ECS-B上打开文件(比如vi)却是立即可以看到更新的内容的。
原因:跟mount的选项以及tail -f实现相关。
用户使用的mount命令
1mount -t nfs4 /mnt/
对于在ECS-B上以这一方式NFS mount的文件系统,默认情况下kernel对文件和目录的属性维护了一份metadata缓存,文件和目录属性(包括许可权、大小、和时间戳记)缓存的目的是减少 NFSPROC_GETATTR 远程过程调用(RPC)的需求。
tail -f 的实现是sleep+fstat来观察文件属性(主要是文件大小)的变化,然后读入文件并输出。可见,tail -f是否能实时输出文件内容,主要取决于fstat的结果,由于前面描述得metadata cache的存在,fstat轮询到的并不是实时的文件属性,因此,即使在NFS服务器端文件已经更新了,但tail ...
harbor自签名证书后无法pull镜像
harbor自签名证书后无法pull镜像harbor配置了自签名的https证书后,docker pull镜像时提示509证书不受信,提示如下错误
12[root@k8s-03 ~]# docker pull harbor.nnv5.cn/test/myapp:v1Error response from daemon: Get https://harbor.nnv5.cn/v2/: x509: certificate signed by unknown authority
可是我明明将自签名的ca导入到了curl的证书文件中/etc/pki/tls/certs/ca-bundle.crt,使用curl访问正常。
123456789101112131415161718192021222324252627[root@localhost ~]# curl -v https://harbor.nnv5.cn* About to connect() to harbor.nnv5.cn port 443 (#0)* Trying 172.23.2.83...* Connected to ha ...