k8s 集群配置
IP | Host | 配置 |
---|---|---|
11.0.1.150 | master1 (keepalived+haproxy) | 2C 4G 30G |
11.0.1.148 | master2 (keepalived+haproxy) | 2C 4G 30G |
11.0.1.149 | node1 | 2C 4G 30G |
vip 地址: https://11.0.1.100:16443
认识 kubeconfig
kubeconfig 即为 kubectl 用于管理 k8s 集群的配置文件
关系图解
- current-context 选择 context 操作相应集群
- context 将 user 与 cluster 联系起来
- user 提供要操作集群的 cert 与 key
- cluster 提供集群的 ca 与 集群的入口地址
user 与 cluster 是弱关联
kubectl config 参数详解
$ kubectl config --help
Available Commands:
current-context 显示当前上下文
delete-cluster 删除kubeconfig文件中指定的集群
delete-context 删除kubeconfig文件中指定的context
delete-user 删除kubeconfig文件中指定的user
get-clusters 显示kubeconfig文件中定义的集群
get-contexts 显示一个或多个contexts
get-users 显示kubeconfig文件中定义的users
rename-context 重命名kubeconfig文件里的context
set 在kubecconfig文件中设置一个单独的值
set-cluster 在kubecconfig中设置集群条目
set-context 在kubecconfig中设置上下文条目
set-credentials 在kubecconfig中设置一个用户条目
unset 取消kubecconfig文件中单个值的设置
use-context 在kubecconfig文件中设置当前上下文(kubecconfig文件可以有多个上下文)
view 显示合并的 kubeconfig 配置或一个指定的 kubeconfig 文件
kubeconifg 使用
- kubectl 自动加载 ~/.kube/config
- 如果指定
$KUBECONFIG
, 从$KUBECONFIG
加载 - 也可以通过 kubectl 指定: kubectl config get-contexts –kubeconfig=/root/.kube/config1
配置文件参考:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBD......
server: https://11.0.1.100:16443 # 指定集群的入口
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes # 指定当前 context 上下文
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: ......
client-key-data: ......
生成新的 context
# 获取 kubeconfig 中所有 cluster
$ kubectl config get-clusters
NAME
kubernetes
$ kubectl config set-context test --cluster=kubernetes --user=kubernetes-admin --kubeconfig=/root/.kube/config --namespace=test
# --kubeconfig kubeconfig 是默认路径可省略
# --namespace 指定 context 的默认 namespace, 没有即为 default
新增 context:
......
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
- context: # 新增 context
cluster: kubernetes
namespace: test
user: kubernetes-admin
name: test
...
切换 context 上下文
# 查看当前 context
$ kubectl config current-context
kubernetes-admin@kubernetes
# 查看 kubeconfig 中所有 context
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
kubernetes-admin@kubernetes kubernetes kubernetes-admin
* test kubernetes kubernetes-admin test
# 切换 context
$ kubectl config use-context test
Switched to context "test".
# 创建 pod | 默认在 test namespace 下创建
$ k get po
NAME READY STATUS RESTARTS AGE
nginxpod 1/1 Running 0 14m
多集群管理
因集群配置有 vip, 本文将新增一个 cluster 直接指向 master apiserver 的地址, 所以, cluster 的 ca 不变
$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBD......
server: https://11.0.1.100:16443
name: kubernetes
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBD......
server: https://11.0.1.150:6443
name: direct-cluster
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
- context:
cluster: kubernetes
namespace: test
user: kubernetes-admin
name: test
current-context: test
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: ......
client-key-data: ......
我们新增了一个direct-cluster
的cluster
创建 context
# 默认 namespace 为 default
$ kubectl config set-context direct --user=kubernetes-admin --cluster=direct-cluster
# 切换 context
$ kubectl config use-context direct
$ kubectl get po
No resources found in default namespace.
新增 context:
......
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
- context:
cluster: kubernetes
namespace: test
user: kubernetes-admin
name: test
- context: # 新增 context
cluster: direct-cluster
user: kubernetes-admin
name: direct
...
参考: