在 Kubernetes 中元件间的通讯都是藉由 API Server
通讯,而 API Server
是和 etcd
通讯的唯一元件,因此在 Kubernetes 上所有状态都是藉由 API Server
来修改。从下面这个系统上预设元件来看,etcd
、coredns
、apiserver
、controller-manager
和 scheduler
都运行在 master 上,我们所下达的 kubectl
相关命令都是 API Server
向 kubelete
(每个节点都会安装的代理) 发起。
$ kubectl get pods -n kube-system -o custom-columns=POD:metadata.name,NODE:spec.nodeName
POD NODE
coredns-66bff467f8-5pfbz master
coredns-66bff467f8-v4txv master
etcd-master master
kube-apiserver-master master
kube-controller-manager-master master
kube-flannel-ds-amd64-gljsn master
kube-flannel-ds-amd64-s58vt node01
kube-flannel-ds-amd64-w2q8g node02
kube-proxy-fm749 master
kube-proxy-xpt4b node01
kube-proxy-xxlnx node02
kube-scheduler-master master
对於只有一个 master 来说其元件都没有高可用性,如果有实现的话 etcd
和 API Server
将可以并行执行,相对的其它元件只有一个会做回应,其余都是备援状态。
etcd
是一个分散式以 Key-value 做储存的软件,etcd
在 Kubernetes 中是唯一储存集群状态和一些数据的地方,那为何只有 API Server
可以对 etcd
读写?它避免了 Optimistic Concurrency Control
或是增强验证系统,这样替换元件时也方便。
储存在 etcd
中的资源依照目前不同版本有不一样的做法,在第二版会是以档案系统方式建立,而第三版是以 /
做为取代目录。这边补充一个 etcd
使用 RAFT
演算法保证一致性。
$ sudo apt install etcd-client # 安装套件
这边使用的环境是 kubeadm
架设的,而预设 etcd 使用 tls。
$ sudo ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key get /registry/namespaces/default -w=json | jq .
{
"header": {
"cluster_id": 14991974125033499000,
"member_id": 13655367627031355000,
"revision": 205622,
"raft_term": 2
},
"kvs": [
{
"key": "L3JlZ2lzdHJ5L25hbWVzcGFjZXMvZGVmYXVsdA==",
"create_revision": 152,
"mod_revision": 152,
"version": 1,
"value": "azhzAAoPCgJ2MRIJTmFtZXNwYWNlErIBCpcBCgdkZWZhdWx0EgAaACIAKiQwN2ZjNjg5NS1lZDY2LTRlZDMtYWFkYS03MDRiZThmN2FjYjcyADgAQggInrvu+QUQAHoAigFPCg5rdWJlLWFwaXNlcnZlchIGVXBkYXRlGgJ2MSIICJ677vkFEAAyCEZpZWxkc1YxOh0KG3siZjpzdGF0dXMiOnsiZjpwaGFzZSI6e319fRIMCgprdWJlcm5ldGVzGggKBkFjdGl2ZRoAIgA="
}
],
"count": 1
}
$ sudo ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key get /registry/namespaces/ --prefix -w=json | jq . # --prefix 查看子目录
这边的 Key 使用 base64 编码,解码後就可以知道其结构
$ echo L3JlZ2lzdHJ5L25hbWVzcGFjZXMvZGVmYXVsdA== | base64 -d
/registry/namespaces/default
备份後续如果可以的话会补上~~~
<<: Day 26 -- 3 Steps 部署Sidekiq 背景任务在 Heroku
分行 <br>也是一个实用的标签 可以用来排版段落 例如 <p>现在是九月&...
今天要来跟各位一起解析 QnA Maker Bot,以下简称 QA Bot。 今天是参考 官方范例程...
接续昨天要做的功能,我们要在discord上直接输入中文就能查询到物品的拍卖价格网址,今天主要是介绍...
Youtube 频道:https://www.youtube.com/c/kaochenlong ...
即使HTTP基本身份验证确实使用Base64来编码用户ID和密码,HTTP仍以明文形式传输编码,并依...