一、golang基础知识
1、os包提供一些函数和变量,os.Args是一个字符串Slice,通过s[i]来访问
2、bufio包,可以简洁高效的处理输入和输出,最有用的为扫描器Scanner的类型
3、转义字符verb
%d 十进制整数
%x,%o,%b 十六进制,八进制,二进制
%f,%g,%e 浮点数
%t 布尔型
%c 字符(Unicode码点)
%s字符串
%q 带引号字符串
%v 内置格式的任何值
%T 任何值的类型
%% 百分号
4、for _, arg := range os.Args[1:] range产生一对值:索引和这个索引处元素的值
5、ioutil.ReadAll读取整个响应结果ioutil.ReadAll(resp.Body)
6、程序结构
函数名首字母大小写决定其可见性是否跨包
变量,短变量生命可以用来声明和初始化局部变量
指针的值是一个变量的地址。使用指针可以在无需知道变量名字的情况下,间接读取或更新变量的值
函数返回局部变量的地址是非常安全的。
因为一个指针包含变量的地址,所以传递一个指针参数给函数,能够让函数更新间接传递的变量值。
new函数,表达式new(T)创建一个未命名的T类型变量,初始化为T类型的零值,并返回其地址(地址类型为*T)
p := new(int)
fmt.Println(*p) //输出“0”
变量的生命周期,选择使用堆或者栈上的空间分配,不是基于使用var还是new声明变量,而是根据回收时间
7、包初始化从初始化包级别的变量开始,这些变量按照声明顺序初始化,在依赖已解析完毕的情况下,根据依赖的顺序进行。
8、func init() {/* .... */ } 这个init函数不能被调用和被引用,当程序启动的时候,init函数按照他们声明的顺序自动执行。
9、go语言数据类型基础类型、聚合类型、引用类型、接口类型。
10、基础类型,运算符&^是按位清除(AND NOT)表达式z=x&^y中,若y的某位是1,则z对应位为0;否则,它就等于x的对应位。
11、转义符
\a 警告或响铃
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
\' 单引号
\" 双引号
\\ 反斜杠
字符串字面量,十六进制转义字符写成\xhh,h为十六进制且两位;八进制转义字符写成\ooo,必须使用三位八进制数字(0-7),且不能超过\377,字符串字面量的转义让我们用码点的值知名Unicode字符,有两种形式,\uhhhh表示16位码点值。\Uhhhhhhhh表示32位码点值,其中一个h代表一个十六进制数字。"\u4e16\u756e", "\U00004e16\U0000754c"
二、kubernetes相关
1、istio
Metrics
Collecting new metics
kubectl apply -f samples/bookinfo/telemetry/metrics.yaml
通过port-forward可以暴露出prometheus,通过9090端口访问:
kubectl -n istio-system port-forward -address 0.0.0.0 $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &
杀掉port-forward进程:
killall kubectl
司令官Pilot
Pilot管理所有的Envoy,允许用户创建Envoy代理之间的流量转发路由规则,并配置故障恢复功能上报规则,例如超时、重试及熔断。还支持设置安全(认证、鉴权、策略控制)遥测上报等规则。xDS服务发现让每个Envoy都能了解上游服务信息。
2、Kubernetes
ServiceAccount
service account应用于pod访问api-server时认证授权,在namespace创建的时候会生成默认的default的service account,我们在这个namespace下创建pod的时候,如果没有指定serviceaccount,那么在spec下就会生成serviceAccount: default,表明当前pod使用default的SA,使用client-go下的in-cluster目录下的main生成镜像,对k8s的api进行操作时,默认会提示没有权限。因为现在只是有了SA,但是没有给SA赋权,赋权通过Rolebinding和clusterrolebinding来绑定SA和role或者clusterrole 的关系,因为k8s在创建的时候已经默认创建了一些不同权限的clusterrole,我这边首先需要读取API的权限,通过绑定clusterrole的view来获得读取权限:
kubectl create clusterrolebinding default-view --clusterrole=view --serviceaccount=default:default
如果要创建deployment或者service等资源时,需要有写的权限,简单期间可以直接绑定admin的clusterrole
kubectl create clusterrolebinding default-admin --clusterrole=admin --serviceaccount=default:default
下面是service account的详细介绍:
https://tonybai.com/2017/03/03/access-api-server-from-a-pod-through-serviceaccount/
3、client-go
https://www.bookstack.cn/read/huweihuang-kubernetes-notes/develop-client-go.md
kubernetes Informer