K8s入门基础知识

基础名词

  • 节点/node:一个节点是一个运行Kubernetes 中的主机。
  • 容器组/pod:一个 Pod 对应于由若干容器组成的一个容器组,同个组内的容器共享一个存储卷(volume)。
  • 服务/services:一个 Kubernetes 服务是容器组逻辑的高级抽象,同时也对外提供访问容器组的策略。
  • 容器组生命周期/pos-states:包含所有容器状态集合,包括容器组状态类型,容器组生命周期,事件,重启策略,以及 replication controllers。

基础命令

1
2
3
4
5
6
7
8
9
10
#创建部署
kubectl create deployment test --image=nginx:latest
#获取部署信息
kubectl get deployments
#获取集群节点
kubectl get nodes
#获取容器组
kubectl get pods --all-namespaces
#获取服务
kubectl get service --all-namespaces

kubeconfig

是远程连接集群的授权证书配置文件,不管集群管理,还是流水线发布都会用到,集群下面的是默认管理员的账号,最好是用个人自己的集群kubeConfig。

安装成功后位于~/..kube/config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#----集群参数配置---
apiVersion: v1 #标识客户端解析器的版本,不应手动编辑
clusters: #可以配置多个集群
- cluster: #通过kubectl config指令生成
certificate-authority-data: LS....tLQo=
server: https://ip:6443 #集群访问方式
name: cluster.local #集群名字
#----上下文参数配置---
contexts: #多个上下文
- context: #关联集群clusters和用户users
cluster: cluster.local #集群名字
user: kubernetes-admin #客户端用户
name: kubernetes-admin@cluster.local #上下文名字
current-context: kubernetes-admin@cluster.local #当前使用那个上下文,就可以确定使用那个集群环境了
kind: Config #标识客户端解析器的模式,不应手动编辑
preferences: {} #指定可选(和当前未使用)的 kubectl 首选项
#----客户端认证参数配置---
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1....LS0tLQo=
client-key-data: LS0tL...S0tLQo=
创建用户认证授权的 kubeconfig 文件(待验证)

参考创建用户认证授权的 kubeconfig 文件

  1. /etc/kubernetes/ssl目录创建devuser-csr.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {
    "CN": "devuser",
    "hosts": [],
    "key": {
    "algo": "rsa",
    "size": 2048
    },
    "names": [
    {
    "C": "CN",
    "ST": "BeiJing",
    "L": "BeiJing",
    "O": "k8s",
    "OU": "System"
    }
    ]
    }
  2. 生成CA证书和密钥cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes devuser-csr.json | cfssljson -bare devuser

  3. 创建用户的kubeconfig 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 设置集群参数
    export KUBE_APISERVER="https://172.20.0.113:6443"
    kubectl config set-cluster kubernetes \
    --certificate-authority=/etc/kubernetes/ssl/ca.pem \
    --embed-certs=true \
    --server=${KUBE_APISERVER} \
    --kubeconfig=devuser.kubeconfig

    # 设置客户端认证参数
    kubectl config set-credentials devuser \
    --client-certificate=/etc/kubernetes/ssl/devuser.pem \
    --client-key=/etc/kubernetes/ssl/devuser-key.pem \
    --embed-certs=true \
    --kubeconfig=devuser.kubeconfig

    # 设置上下文参数
    kubectl config set-context kubernetes \
    --cluster=kubernetes \
    --user=devuser \
    --namespace=dev \
    --kubeconfig=devuser.kubeconfig

    # 设置默认上下文
    kubectl config use-context kubernetes --kubeconfig=devuser.kubeconfig
  4. 查看上下文,执行kubectl config get-contexts,会显示~/.kube/config的账号

  5. 替换后,执行cp -f ./devuser.kubeconfig ~/.kube/config可以显示新的账号

  6. 绑定角色,限制用户可以访问那几个空间(namespace),例如

    1
    2
    3
    #---这样 devuser 用户对 dev 和 test 两个 namespace 具有完全访问权限。
    kubectl create rolebinding devuser-admin-binding --clusterrole=admin --user=devuser --namespace=dev
    kubectl create rolebinding devuser-admin-binding --clusterrole=admin --user=devuser --namespace=test
  7. 测试,执行kubectl get pods --namespace default会返回Forbidden无权限