kubectl create
# kubectl create
创建一个集群资源。
# 基本格式
kubectl create <资源类型> <名称> <选项>
2
# 可创建的资源(笔者已学或已知)
# 控制器deployment
官方不推荐你通过命令行的方式来创建 Deployment 资源,所以--image
是其唯一支持的选项。
# 格式
kubectl create deployment <名称> --image=<镜像>
kubectl create deploy <名称> --image=<镜像>
# 快速生成一个 Deployment 的 yaml 文件
kubectl create deployment <名称> --image <镜像> --dry-run=client -o yaml > test.yaml
2
3
4
5
6
# 其他控制器
其他控制器(DaemonSet、RC 和 RS)都无法通过命令行创建,你必须先生成一个 Deployment 的配置文件,然后对其进行编辑。
# 任务Job
# 通过命令行创建 job
kubectl create job <名称> --image <镜像> -- "命令"
# 示例(快速生成 job 的 yaml 配置文件)
kubectl create job job1 --image busybox --dry-run=client -o yaml -- sh -c "echo hello ; sleep 10" > job1.yaml
2
3
4
5
6
# 周期任务CronJob
CronJob 的计划任务时间和 Linux 系统的计划任务格式一样:分 时 日 月 周
。
# 通过命令行创建 CronJob
kubectl create cronjob <名称> --image <镜像> --schedule="<计划任务时间>" -- <命令>
kubectl create cj <名称> --image <镜像> --schedule="<计划任务时间>" -- <命令>
# 示例(快速生成 CronJob 的 yaml 配置文件)
kubectl create cj job2 --image=busybox --schedule="*/1 * * * *" --dry-run=client -o yaml -- sh -c "echo hello world" > job2.yaml
2
3
4
5
6
7
# 密码存储secret
# 格式
kubectl create secret generic <名称> <选项>
2
有 4 种创建 Secret 资源的方式:
- 通过 键值对 创建
- 将一个文件创建为 secret
- 通过一个变量文件来创建 secret
- 通过 yaml 配置文件来创建 secret
# --from-literal
以键值对的形式创建 secret。
可以指定多个--from-literal=
选项,基于多个键值对 创建 多个密钥对。
kubectl create secret generic <名称> --from-literal=<键1>=<值1> ...
# 示例(以 abc 作为密钥键,以 123 作为密钥值)
kubectl create secret generic mysec --from-literal=abc=123
2
3
4
# --from-file
将一个文件创建为 secret。
可以指定多个--from-file=
选项,基于多个文件 创建 多个密钥对。
- 文件名称作为密钥的 “键”
- 文件内容作为密钥的 “值”
kubectl create secret generic <名称> --from-file=<文件名1> ...
# 示例(以文件名 hosts 作为键,文件内容作为值)
kubectl create secret generic mysec --from-file=/etc/hosts
2
3
4
# --from-env-file
通过一个整合过的变量文件来创建 secret。
和--from-literal
选项差不多,也是以键值对的方式来创建密钥。但这次将键值对整合到了一个文件当中,一行一个键值对,逐行识别并创建密钥对。
# 示例
cat <<EOF > test.txt
abc=123
xyz=456
jkl=789
EOF
kubectl create secret generic mysec --from-env-file=test.txt
2
3
4
5
6
7
8
# 密码存储ConfigMap
# 格式
kubectl create configmap <名称> <选项>
kubectl create cm <名称> <选项>
2
3
# --from-literal
以键值对的形式创建 configmap。
可以指定多个--from-literal=
选项,基于多个键值对 创建 多个密钥对。
kubectl create cm <名称> --from-literal=<键1>=<值1> ...
# 示例(以 abc 作为密钥键,以 123 作为密钥值)
kubectl create cm mymap --from-literal=abc=123
2
3
4
# --from-file
将一个文件创建为 configmap。
可以指定多个--from-file=
选项,基于多个文件 创建 多个密钥对。
- 文件名称作为密钥的 “键”
- 文件内容作为密钥的 “值”
kubectl create cm <名称> --from-file=<文件名1> ...
# 示例(以文件名 hosts 作为键,文件内容作为值)
kubectl create cm mymap --from-file=/etc/hosts
2
3
4
# 角色Role
注意--resource
没有s
。
kubectl create role <名称> --verb=<权限> --resource=<资源>
# 快速生成 yaml 配置文件
kubectl create role <名称> --verb=<权限> --resource=<资源> --dry-run=client -o yaml > role.yaml
2
3
4
# --verb
为角色分配的权限,多个权限之间通过逗号分隔。
patch
(修改)权限,例如对 Deployment 的scale
或edit
操作
kubectl create role <名称> --verb=get,list,watch,create,update,patch,delete
# --resource
角色权限作用于哪些集群资源上,多个资源之间通过逗号分隔。注意--resource
没有s
。
资源的名称和kubectl get <资源名称>
时提供的名称一样。
kubectl ... --resource=pods,
# 集群角色ClusterRole
和角色 Role 一样。
kubectl create clusterrole <名称> --verb=<权限> --resource=<资源>
kubectl create clusterrole <名称> --verb=<权限> --resource=<资源> --dry-run=client -o yaml > clusterrole.yaml
2
3
# 角色绑定RoleBinding
# 将角色授权给一个用户
kubectl create rolebinding <绑定名称> --role=<角色名称> --user=<绑定的目标用户>
# 将角色授权给某个命名空间中的一个 SA(服务账户)
kubectl create rolebinding <绑定名称> --role=<角色名称> --serviceaccount=<命名空间>:<SA名称>
# 普通的角色绑定 可以使用集群角色,但只作用于单个命名空间
kubectl create rolebinding <绑定名称> --clusterrole=<集群角色名称> ......省略
# 快速生成 yaml 配置文件
kubectl create rolebinding <绑定名称> <...选项...> --dry-run=client -o yaml > role1binding.yaml
2
3
4
5
6
7
8
9
10
11
# --role
指定要绑定给用户的角色名称,需要提前创建角色。
# --clusterrole
如果你对一个集群角色 应用了 普通的绑定,则只作用于单个命名空间。
# --user
指定受绑定的集群用户,需要提前创建集群用户。
# --serviceaccount
指定受绑定的服务账户,需要提前创建。指定的格式为--serviceaccount=<命名空间>:<SA名称>
# 集群角色绑定ClusterRoleBinding
# 将集群角色授权给一个用户
kubectl create clusterrolebinding <绑定名称> --clusterrolerole=<集群角色名称> --user=<绑定的目标用户>
# 将集群角色授权给一个 SA(服务账户)
kubectl create clusterrolebinding <绑定名称> --clusterrolerole=<集群角色名称> --serviceaccount=<命名空间>:<SA名称>
# 禁止!!!集群角色绑定不能使用普通角色
kubectl create clusterrolebinding <绑定名称> --role=...这是不可能的...
# 生成 yaml 配置文件
kubectl create clusterrolebinding <绑定名称> --clusterrolerole=<集群角色名称> --user=<绑定的目标用户> --dry-run=client -o yaml > role1binding.yaml
2
3
4
5
6
7
8
9
10
11
# 服务账户ServiceAccount(SA)
kubectl create sa <名称>
一般情况下,当创建一个 SA 之后,会自动为其创建一个格式为<sa名称>-token-<随机字符>
的 secret 资源,例如:
kubectl create sa web
kubectl get secrets | grep web # web-token-000000
2
# 让我们稍微讨论一下RBAC资源(来自第三方)
ClusterRole|Role 定义了一组权限及其可用范围,是在整个集群中 还是 仅在单个命名空间中。
ClusterRoleBinding|RoleBinding 将一组权限与帐户连接起来,并定义应用权限的位置,是在整个群集中还是仅在单个命名空间中。
因此,有 4 种不同的 RBAC 组合和 3 种有效的组合:
- Role + RoleBinding(可在单个空间中使用,在单个命名空间中应用)
- ClusterRole + ClusterRoleBinding(群集范围内可用,群集范围内应用)
- ClusterRole + RoleBinding(群集范围内可用,应用于单个命名空间)
- Role + ClusterRoleBinding(不可能:在单个命名空间中可用,在群集范围内应用)