目录
本文目的:首先通过第一节“查看集群状态”来直接上手使用一些常用的Kubectl指令,然后通过Kubectl指令部署一个应用。
1 查看集群状态
1.1 查看K8S集群中的节点状态
只要机器上部署了kubelet,本指令就能查到该机器,Master机器也能被查到。
kubectl get node
1.2 列出K8S中所涉及到的所有资源
字段:资源名、缩写、组、是否支持命名空间、资源名称
kubectl api-resources
1.3 查看Master组件状态
kubectl get cs
然而,输入完上述指令后,默认情况下Matser组件中的scheduler和controller-manager没有被监听到,这是因为这两个组件的配置文件中端口号被默认配置为0,将下图中那一行注释掉即可。
如下图:分别注释到两个配置文件中的那一行
#分别打开配置文件,注释到端口为0的那一行
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
vi /etc/kubernetes/manifests/kube-scheduler.yaml
#重启kubelet
systemctl restart kubelet
修改配置文件后:
1.4 查看Apiserver代理的URL
kubectl cluster-info
1.5 查看K8S集群详细信息
会列出特别多的信息
kubectl cluster-info dump
1.6 查看资源信息
kubectl describe <资源> <主机名称>
#查看集群中Matser节点的详细信息
kubectl describe node kubeadm-master
2 kubeconfig 配置文件
kubectl使用kubeconfig认证文件连接K8s集群,使用kubectl config指令生成kubeconfig文件。
默认情况下Matser节点上有该配置文件而其他Node节点上则没有。如果想在Node机器上访问,就必须也生成一份kubeconfig配置文件。
查看kubeconfig配置文件:
cat /root/.kube/config
3 kubectl 常用命令
3.1 常用指令列表
kubectl帮助文档,里面有个网址可查看更详细信息:
kubectl --help
kubectl常用命令整理后如下:
kubectl管理命令汇总 | ||
类型 | 命令 | 描述 |
基础命令 | create | 通过文件名或标准输入创建资源 |
expose | 为Deployment、Pod创建Service | |
run | 在集群中运行一个特定的镜像 | |
set | 在对象上设置特定的功能 | |
explain | 文档参考资料 | |
get | 显示一个或多个资源 | |
edit | 使用系统编辑器编辑一个资源。 | |
delete | 通过文件名、标准输入、资源名称或标签选择器来删除资源。 | |
部署命令 | rollout | 管理Deployment,Daemonset资源的发布(例如状态、发布记录、回滚等) |
rolling-update | 滚动升级,仅限ReplicationController | |
scale | 对Deployment、ReplicaSet、RC或Job资源扩容或缩容Pod数量 | |
autoscale | 为Deploy,RS,RC配置自动伸缩规则(依赖metrics-server和hpa) | |
集群管理命令 | certificate | 修改证书资源 |
cluster-info | 显示集群信息 | |
top | 查看资源利用率(依赖metrics-server) | |
cordon | 标记节点不可调度 | |
uncordon | 标记节点可调度 | |
drain | 驱逐节点上的应用,准备下线维护 | |
taint | 修改节点taint标记 | |
故障诊断和调试命令 | describe | 显示资源详细信息 |
logs | 查看Pod内容器日志,如果Pod有多个容器,-c参数指定容器名称 | |
attach | 附加到Pod内的一个容器 | |
exec | 在容器内执行命令 | |
port-forward | 为Pod创建本地端口映 | |
proxy | 为KubernetesAPIserver创建代理 | |
cp | 拷贝文件或目录到容器中,或者从容器内向外拷贝 | |
高级命令 | apply | 从文件名或标准输入对资源创建/更新 |
patch | 使用补丁方式修改、更新资源的某些字段 | |
replace | 从文件名或标准输入替换一个资源 | |
convert | 在不同API版本之间转换对象定义 | |
设置命令 | label | 给资源设置、更新标签 |
annotate | 给资源设置、更新注解 | |
completion | kubectl工具自动补全,source<(kubectlcompletionbash)(依赖软件包bash-completion) | |
其他命令 | api-resources | 查看所有资源 |
api-versions | 打印受支持的API版本 | |
config | 修改kubeconfig文件(用于访问API,比如配置认证信息) | |
help | 所有命令帮助 | |
version | 查看kubectl和k8s版本 |
3.2 kubectl 指令部署应用
(1)部署镜像到K8S集群
#1.1 使用Deployment控制器部署镜像(生成Pod)到K8S集群中:
kubectl create deployment java-demo --image=lizhenliang/java-demo
#1.2 查看Pod
kubectl get pods
#1.3 查看资源信息(kubectl describe <资源类型> <具体名字>)
kubectl describe pod java-demo-56d54df448-2cw44
(2)使用Service将Pod暴露出去
#2.1 使用Service将Pod暴露出去(80端口是负载均衡的端口,8080是容器中应用程序的端口,NodePort是service的类型,用于让浏览器访问):
kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort
#2.2 获取service(随机生成的3xxxx端口用于从外部访问容器)
kubectl get service
(3)访问应用
port通过kubectl get svc 获取,http://NodeIP:PORT/
到目前为止,已经介绍了通过kubectl指令在命令行中部署应用,在后面的学习中,会介绍通过yaml配置文件部署应用的方法。