kubectl apply -f https://k8s.io/examples/application/deployment.yaml kubectl describe deployment nginx-deployment
- 如果是自动注册入cluster,同时提交memory,cpu等node的能力
- 如果是手动加入,那么需要手动设置
- 调度器scheduler保证所有容器的资源需求不大于节点的资源能力
- 总量只是被kubelet管理的容器,不包括直接启动的容器,也不包括其他非kubelet控制的进程(也占资源)
NAME | SHORTNAMES | purpose |
---|---|---|
pods | po | |
services | svc |
k8s的最小管理和调度单元,一个pod中可以有1个或多个容器。这些容器共享网络、存储
一组pods提供的服务。在你的集群中,如果有一组pods提供一种服务(比如检索服务),但是pods会不断的更新、销毁后重启拉起,使用这组 服务的其他服务,如何马上切换到最新的pods机器ip上去呢? service解决这样的问题。
Note: IPVS是一个内核模块,启动kube-proxy之前,确保IPVS可用。
更好的方式,DNS Server(CoreDNS/kube-dns),原理也是watch k8s的API
* $service_name$.$namespace$
pods之间是否都运行访问呢?
利用k8s的资源(DaemonSetEnsures, Deployment等等)来实现计算特性,这些都是集群的特性,所以放在kube-system的命名空间里。
暴露http的接口。终端用户、集群中的不同部分、其他一些组件
申明式
在k8s中,控制器不断循环观察集群的状态。每个控制器都不断将当前的集群状态逼近期望的状态
NAME | SHORTNAMES | purpose |
---|---|---|
ReplicaSet | rs | maintain a stable set of replica Pods running at any given time |
ReplicationController | rc | a specified number of pod replicas are running at any one time |
Deployments | deploy | provides declarative updates for Pods and ReplicaSets. 部署升级 |
HorizontalPodAutoscaler | hpa |
NAME | SHORTNAMES | APIGROUP | NAMESPACED | KIND |
---|---|---|---|---|
nodes | no | false | Node | |
pods | po | true | Pod | |
crontabs | ct | stable.example.com | true | CronTab |
Buffers | Windows | Tabs | 说明 |
---|---|---|---|
:split [filename] | :tabnew | Open a new | |
:e [filename] | vsplit [filename] | :tabedit [filename] | Edit the file with the provided name |
:b[num] | Open buffer number N(as shown in ls) | ||
:bn | gt | Go to next | |
:bp | gT | Go to Previous | |
:ls | :tabs | list | |
Ctrl+w+h/j/k/l | switch windows | ||
Ctrl+w+w | switch windows | ||
:bd | delete the current buffer, error if there are unwritten changes | ||
:bd! | deletes the current buffer, no error if there are unwritten changes | ||
:q | :q | quit |
ctrl+]
跳到方法定义或实现的地方 # cscope也提供foo. or foo->
自动提示 # cscope不提供ctags -R #将源文件(.c .cpp), 构建成tag文件
- 使用
ctrl+]
跳到方法定义或实现的地方,ctrl+t
返回- :tag tag1 直接跳到对应的tag
- vim -t main 直接vim打开对应的tag文件,并将光标跳转到对应的行位置
cscope特性
- 像ctags一样
ctrl+]
,使用set cscopetag
- 还提供当前方法,被调用的地方,可以跳转到调用位置
- 搜索
- 文本
- 正则
- 文件
- 函数及调用函数
使用方式
cscope -Rbq ## 产生对应的文件,供vim使用
- vim-go github
- vim-go requires at least Vim 8.0.1453 or Neovim 0.4.0.
主要功能
本身go命令有很多功能,比如:go doc fmt / go doc fmt.Print,将一些功能直接添加到vim中。
- 编译: Build/Install/Test/TestFUnc go build/ go install /go test /go testfunc
- 运行: Run 当前文件
go run
- 语法高亮 & 代码折叠
- 调试工具 delve(:GoDebugStart)
- gopls工具集合
- :GoDef 跳到定义的地方(变量、方法定义)
- vim 里面支持的Ctrl+],原理是vim的tag(:help tag),我们可以添加很多的tag,比如,一个程序里的方法名就可以是一个tag,但是生效之前,你必须生成tag(tag和文件的关系),可以使用
ctags
来生成这个tags。要返回原来标签的位置使用Ctrl+T or Ctrl+O
- go源文件支持的’ctrl+]’不是tags来支持,但是要使用
:tag tag1
,这里是根据tags文件来定位的- 文档 :GoDoc or :GoDocBrowser
- 依赖包引入 :GoImport :GoDrop
- 其他
:GoRename :GoCoverage :GoAddTags :goRemoveTags :GoLint :GoVet :GoErrCheck source analysis tools guru :GoImplements :GoCallees :GoReferrers
修改ctags配置 ~/.ctags
--langdef=Go
--langmap=Go:.go
--regex-Go=/func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\2/d,func/
--regex-Go=/var[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,var/
--regex-Go=/type[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,type/
可以认为是tag对应文件及位置的关系(tag1–>file1.line20)。然后就可以直接跳转到对应的位置。
StringUtils StringUtils.cpp /^ StringUtils::StringUtils()$/;" f class:lang3::StringUtils StringUtils StringUtils.h /^ class StringUtils{$/;" c namespace:lang3 _LANG3_STRINGUTILS_ StringUtils.h 2;" d isBlank StringUtils.cpp /^ bool StringUtils::isBlank(const std::string &text){$/;" f class:lang3::StringUtils isEmpty StringUtils.cpp /^ bool StringUtils::isEmpty(const std::string &text){$/;" f class:lang3::StringUtils isNotBlank StringUtils.cpp /^ bool StringUtils::isNotBlank(const std::string &text){$/;" f class:lang3::StringUtils isNotEmpty StringUtils.cpp /^ bool StringUtils::isNotEmpty(const std::string &text){$/;" f class:lang3::StringUtils lang3 StringUtils.cpp /^namespace lang3{$/;" n file: lang3 StringUtils.h /^namespace lang3{$/;" n main StringUtils.cpp /^int main(){$/;" f ~StringUtils StringUtils.cpp /^ StringUtils::~StringUtils()$/;" f class:lang3::StringUtils
CLIF_argument_struct traceroute-2.1.0/libsupp/clif.h /^struct CLIF_argument_struct {$/;" s
CLIF_call_func traceroute-2.1.0/libsupp/clif.c /^int CLIF_call_func (CLIF_option *optn, char *arg) {$/;" f
tag相关
展示、查找、索引tag
插件 | 说明 |
---|---|
taglist | 标签列表,主要是展示函数列表、字段等 |
文件浏览及buffer浏览相关
展示、查找、索引 文件(file&folder)
插件 | 说明 |
---|---|
minibufexpl | 文件打开后(buffer),展示文件名 |
bufexplorer | 展示buffer相关信息 |
winfileexplorer.vim | 文件浏览器 |
Windows相关
需要区分清楚Buffers Windows Tabs
插件 | 说明 |
---|---|
winmanager | 管理windows的布局,如何放上面这些插件,如将taglist放左上,fileexplorer放左下 |
### 使用kubeadm 先安装三个执行程序(组件)
master 上使用 kubeadm 初始化, 使用kubeadm将当前node节点join到这个集群中
(图中没有kubeadm)
每个node上有一个kubelet
有的情况,并不想将一个node(物理机或者虚拟机)直接变为一个集群中的一个node。比如,有10台物理机的集群,想把这个10台物理机的集群,作为一个node加入到k8s的集群中,那么virtual kubelet(virtal node)就能派上用场
https://github.com/virtual-kubelet/virtual-kubelet
- 主要场景,就是serverless 容器
计算过程中暂存数据
寄存器 | 64位 | 32位 | 16位 | 说明 |
---|---|---|---|---|
累加寄存器 | RAX | EAX | AX | 通用寄存器 |
基址寄存器 | RBX | EBX | BX | 通用寄存器 |
计数寄存器 | RCX | ECX | AX | 通用寄存器 |
数据寄存器 | RDX | EDX | DX | 通用寄存器 |
堆栈基指针 | RBP | EBP | BP | base point 指针变址寄存器 |
堆栈顶指针 | RSP | ESP | SP | stack point 指针变址寄存器 |
RSI | ESI | SI | 指针变址寄存器 | |
RDI | EDI | DI | 指针变址寄存器 | |
r8 | ||||
r9 | ||||
r10 | ||||
r11 | ||||
r12 | ||||
r13 | ||||
r14 | ||||
r15 |
IP寄存器:指令指针寄存器(Instruction Pointer Register),指向代码段下一条指令的位置。
寄存器 | 64位 | 32位 | 16位 | 说明 |
---|---|---|---|---|
IP寄存器 | RIP | EIP | IP | 指向代码段下一条指令 |
段寄存器。每个进程都分代码段和数据段,为了指向不同进程的地址空间。
寄存器 | 64位 | 32位 | 16位 | 说明 |
---|---|---|---|---|
Code Segment Register | CS | CS | 代码段寄存器,代码在内存中的位置 | |
Data Segment Register | DS | DS | 数据段寄存器,数据在内存中的位置 | |
Stack Register | SS | SS | 栈寄存器,后进先出的数据结构 | |
ES | ES | |||
fs | ||||
gs | ||||
eflags | 计算过程中产生的标志位 |
如果运算中需要加载内存中的数据,需要通过DS找到内存中的数据,加载到通用寄存器中。CS、DS都存放这一个段的起始地址。代码的偏移量在IP寄存器中,数据段的偏移量会放在通用寄存器中。
《趣谈Linux操作系统》
寻址方式
直接寻址(Direct Addressing Mode)。只使用ADDRESS_OR_OFFSET寻址,例如movl ADDRESS, %eax把ADDRESS地址处的32位数传送到eax寄存器。
变址寻址(Indexed Addressing Mode) 。上一节的movl data_items(,%edi,4), %eax就属于这种寻址方式,用于访问数组元素比较方便。
间接寻址(Indirect Addressing Mode)。只使用BASE_OR_OFFSET寻址,例如movl (%eax), %ebx,把eax寄存器的值看作地址,把内存中这个地址处的32位数传送到ebx寄存器。注意和movl %eax, %ebx区分开。
基址寻址(Base Pointer Addressing Mode)。只使用ADDRESS_OR_OFFSET和BASE_OR_OFFSET寻址,例如movl 4(%eax), %ebx,用于访问结构体成员比较方便,例如一个结构体的基地址保存在eax寄存器中,其中一个成员在结构体内的偏移量是4字节,要把这个成员读上来就可以用这条指令。
立即数寻址(Immediate Mode)。就是指令中有一个操作数是立即数,例如movl $12, %eax中的$12,这其实跟寻址没什么关系,但也算作一种寻址方式。
寄存器寻址(Register Addressing Mode)。就是指令中有一个操作数是寄存器,例如movl $12, %eax中的%eax,这跟内存寻址没什么关系,但也算作一种寻址方式。在汇编程序中寄存器用助记符来表示,在机器指令中则要用几个Bit表示寄存器的编号,这几个Bit也可以看作寄存器的地址,但是和内存地址不在一个地址空间。