赞
踩
kubectl是用于管理Kubernetes集群的命令行工具
kubectl [command] [TYPE] [NAME] [flags]
command:子命令,如create,get,describe,delete
type:资源类型,可以表示为单数,复数或缩写形式
name:资源的名称,如果省略,则显示所有资源信息
flags:指定可选标志,或附加的参数
子命令 | 说明 |
help | 用于查看命令及子命令的帮助信息 |
cluster-info | 显示集群的相关配置信息 |
version | 查看服务器及客户端的版本信息 |
api-resources | 查看当前服务器上所有的资源对象 |
api-versions | 查看当前服务器上所有资源对象的版本 |
config | 管理当前节点上kubeconfig的认证信息 |
- # 查看当前认证使用的用户及证书
- [root@master ~]# kubectl config get-contexts
- CURRENT NAME CLUSTER AUTHINFO
- * kubernetes-admin@kubernetes kubernetes kubernetes-admin
- # 使用 view 查看详细配置
- [root@master ~]# kubectl config view
- apiVersion: v1
- clusters:
- - cluster:
- certificate-authority-data: DATA+OMITTED
- server: https://192.168.1.50:6443
- name: kubernetes
- contexts:
- - context:
- cluster: kubernetes
- user: kubernetes-admin
- name: kubernetes-admin@kubernetes
- current-context: kubernetes-admin@kubernetes
- kind: Config
- preferences: {}
- users:
- - name: kubernetes-admin
- user:
- client-certificate-data: REDACTED
- client-key-data: REDACTED
- [root@harbor ~]# vim /etc/hosts
- 192.168.1.30 harbor
- 192.168.1.50 master
- 192.168.1.51 node-0001
- 192.168.1.52 node-0002
- 192.168.1.53 node-0003
- 192.168.1.54 node-0004
- 192.168.1.55 node-0005
-
- # 安装集群管理工具kubectl
- [root@harbor ~]# yum install -y kubectl
- # 拷贝证书到目标主机
- # 证书默认路径:${HOME}/.kube/config
- [root@harbor ~]# mkdir -p $HOME/.kube
- [root@harbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config
- # 设置证书的所有者和所属组
- [root@harbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config
- # 验证管理授权
- [root@harbor ~]# kubectl get nodes
k8s 中把可以创建或配置的应用和服务称为资源对象
我们在集群中创建的Pod、负载均衡、存储、网络服务等等都是资源对象
简单资源对象可以使用“kubectl”直接创建
高级资源对象需要使用“资源对象文件”创建
- [root@master ~]# curl -sku admin https://harbor:443/v2/library/myos/tags/list | python3 -m json.tool
-
- # 也可以通过浏览器网页查看
使用run创建一个Pod资源对象
kubectl run Pod名称 [选项/参数] --image=镜像名称:标签
- # 创建资源对象
- [root@master ~]# kubectl run myweb --image=myos:nginx
- pod/myweb created
-
- # 查询资源对象
- [root@master ~]# kubectl get pods -o wide
- NAME READY STATUS RESTARTS AGE IP NODE
- myweb 1/1 Running 0 3s 10.244.1.3 node-0001
-
- [root@master ~]# curl http://10.244.1.3
- Nginx is running !
Pod的status字段是一个PodStatus的对象,Pod对象总是应该处于其生命进程中以下几个相位(phase)之一:
Pending Pod创建过程中,但他尚未被调度成功
Running Pod中所有容器都已经被创建成功
Completed Pod所有容器都已经成功终止,并不会被重启
Failed Pod中的所有容器中至少有一个容器退出是非0状态
Unknow 无法正常获取到Pod对象的状态信息
系统中的核心服务都是运行在Pod中
子命令 | 说明 | 备注 |
run/create | 创建资源对象 | 可输出资源文件模板 |
get | 查看资源对象的状态信息 | 可选参数:-o 显示格式 |
describe | 查询资源对象的属性信息 | |
logs | 查看容器的报错信息 | 可选参数:-c 容器名称 |
kebectl get 资源对象 [资源名称] [选项/参数]
-o name 只显示名字
-o wide 显示更加的详细信息
-o yaml 以yaml语法格式显示资源对象
-o json 以json语法格式显示资源对象
- [root@master ~]# kubectl get namespaces
- NAME STATUS AGE
- default Active 39h
- kube-node-lease Active 39h
- kube-public Active 39h
- kube-system Active 39h
- [root@master ~]# kubectl -n kube-system get pods
- NAME READY STATUS RESTARTS AGE
- etcd-master 1/1 Running 0 39h
- kube-apiserver-master 1/1 Running 0 39h
- kube-controller-manager-master 1/1 Running 0 39h
- kube-scheduler-master 1/1 Running 0 39h
- ... ...
k8s系统核心服务都运行在kube-system名称空间中
kubectl describe 资源类型 [资源名称] [选项/参数]
Events下是事务日志,常用于排错
exec | 在某一个容器内执行特定的命令 | 可选参数:-c 容器名称 |
cp | 在容器和宿主机之间拷贝文件或目录 | 可选参数:-c 容器名称 |
delete | 删除资源对象 | 可选参数:-f 文件名称 |
在容器内执行命令
kubectl exec [选项/参数] Pod名称 -- 操作命令
-it 分配交互式终端
- # 执行非交互命令
- [root@master ~]# kubectl exec myweb -- ls
-
- # 执行交互命令
- [root@master ~]# kubectl exec -it myweb -- /bin/bash
- [root@myweb html]# # 这里可以交互式操作Pod了
拷贝文件/目录
kubectl cp [选项/参数] 原文件 目标文件
路径格式:[Pod名称:绝对路径]
- # 与容器进行文件或目录传输
- [root@master ~]# kubectl cp myweb:/etc/yum.repos.d /root/aaa
- tar: Removing leading `/' from member names
- [root@master ~]# tree /root/aaa
- /root/aaa
- ├── local.repo
- ├── Rocky-AppStream.repo
- ├── Rocky-BaseOS.repo
- ......
- [root@master ~]# kubectl -n work cp /etc/passwd myhttp:/root/mima
- [root@master ~]# kubectl -n work exec myweb -- ls /root/
- mima
集群中所有资源均可使用 delete 命令删除
kubectl delete [选项/参数] 资源类型 资源名称
- # 删除一个Pod
- [root@master ~]# kubectl delete pods myweb
- pod "myweb" deleted
-
- # 删除 work 名称空间下所有 Pod 对象
- [root@master ~]# kubectl -n work delete pods --all
- pod "myhttp" deleted
-
- # 删除名称空间
- [root@master ~]# kubectl delete namespaces work
- namespace "work" deleted
创建kubernetes对象时,必须提供资源对象的一些基本信息(例如:资源的对象的名字),以及描述描述描述该对象的期望状态特征(规约),如果我们在文件中使用Yaml的语法格式描述了上面的信息,这个文件就是资源对象文件
可以创建、删除、变更、管理资源对象
- --- # Yaml文件起始标志
- kind: Pod # 创建资源的类型
- apiVersion: v1 # 资源对应的版本
- metadata: # 属性信息,元数据
- name: myweb # 属性信息,资源的名称
- spec: # 资源的特性描述(规约)
- containers: # 容器资源特征描述
- - name: webserver
- image: myos:nginx
- status: {} # 资源状态,运行后自动生成
Json数据:
{
"ports":
[ {"name":"xx","Port":80}, {"name":"hh","Port":443} ]
}
# Yaml语法格式
- ports:
- - name: xx
- Port: 80
- - name: hh
- Port: 443
- # 创建静态Pod
- [root@node-0003 ~]# vim /etc/kubernetes/mainfests/myweb.yaml
- ---
- kind: Pod
- apiVersion: v1
- metadata:
- name: myweb
- spec:
- containers:
- - name: webserver
- image: myos:nginx
- # 在master查看
- [root@master ~]# kubectl get pods -o wide
- ......
-
- # 删除静态Pod
- 在master上使用kubectl delete pod
- kubelet会自动重建Pod
- 删除资源文件才能彻底删除Pod
- rm -f /etc/kubernetes/mainfests/myweb.yaml
子命令 | 说明 | 备注 |
create | 创建文件中定义的资源 | 支持指令式和资源对象文件配置 |
apply | 创建(更新)文件中定义的资源 | 只支持资源对象文件(声明式) |
delete | 删除文件中定义的资源 | 可支持指令式和资源对象文件配置 |
- # 创建资源对象
- [root@master ~]# kubectl create -f myweb.yaml
- pod/myweb created
- # 不能更新,重复执行会报错
- [root@master ~]# kubectl create -f myweb.yaml
- Error from server (AlreadyExists): error when creating "myweb.yaml": pods "myweb" already exists
- # 使用资源对象文件删除
- [root@master ~]# kubectl delete -f myhttp.yaml
- pod "myhttp" deleted
- [root@master ~]# kubectl get pods
- No resources found in default namespace.
- # 创建资源对象
- [root@master ~]# kubectl apply -f myweb.yaml
- pod/myweb created
- # 更新资源对象
- [root@master ~]# kubectl apply -f myweb.yaml
- pod/myweb configured
- # 删除资源对象
- [root@master ~]# kubectl delete -f myweb.yaml
- pod "myweb" deleted
-
- # 拓展提高
- # 与 kubectl apply -f myweb.yaml 功能相同
- [root@master ~]# cat myweb.yaml |kubectl apply -f -
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。