config kubectl_kubectl详解
kubectl是目前管理k8s集群的最强利器.所有对集群的控制和管理都可以通个kubectl进行.通过kubectl --help查看帮助信息。基本命令(初级):create创建一个新的资源从一个文件或者stdinexpose获取replication controller,service,deployment和pod,并将其作为一个新的服务.run...
kubectl是目前管理k8s集群的最强利器.所有对集群的控制和管理都可以通个kubectl进行.
通过kubectl --help查看帮助信息。
基本命令(初级):
create 创建一个新的资源从一个文件或者stdin
expose 获取replication controller,service,deployment和pod,并将其作为一个新的服务.
run 在集群内运行特定镜像.
set 在对象上设置特定功能
run-container 在集群上运行特定镜像,已被run替代
基本命令(中级):
get 现实一个或多个资源
explain 资源文档
edit 编辑服务器上的资源
delete 按照文件名称,标准输入,资源和名称来刪除资源,还可以通过资源和标签选择器
部署命令:
rollout 管理资源的部署
rolling-update 执行给定的ReplicationController的滚动更新
scale 为Deployment,ReplicaSet,Replication等控制器设置一个新的大小或者任务
autoscale 自动扩展 Deployment, ReplicaSet, 或 ReplicationController
集群管理命令:
certificate 修改证书资源
cluster-info显示集群信息
top 显示资源 (CPU/Memory/Storage)使用情况
cordon 将节点标记为不可调度
uncordon 将节点标记为可调度
drain 节点准备维护
taint 更新一个或多个节点上的错误
故障排除与调试命令:
describe 显示特定资源或资源组的详细信息
logs 打印pod中容器的日志
attach 进入正在运行的容器
exec 在容器中执行命令
port-forward 将一个或多个本地端口转发到pod
proxy 运行代理到kubernetes的API Servercp从容器中复制一个文件或者目录
auth 检查授权
高级命令:
apply 通过filename或stdin将配置应用到资源patch更新资源的字段,通过策略合并
replace 用filename或stdin替换资源
convert 在不同的API版本之间转换配置文件
配置命令:
label 为资源更新标签
annotate 为资源更新注释
completion 输出指定shell的shell代码(bash or zsh)
其它命令:
api-versions 输出服务器支持的API版本
config 修改kubeconfig配置文件
help 查看帮助信息
plugin 运行命令行插件
version 打印客户端和服务端的版本信息
当然也可以通过 kubectl config --help类似命令查看子命令:
修改kubeconfig文件中的数据.
The loading order follows these rules:1. If the --kubeconfig flag is set, then only that fileis loaded. The flag
may only be set once and no merging takes place.2. If $KUBECONFIG environment variable is set, thenit is used a list of paths
(normal path delimitting rulesforyour system). These paths are merged. When
a value is modified, it is modifiedin the filethat defines the stanza. When a
value is created, it is createdin the first file that exists. If no files inthe chain exist,then it creates the last file inthe list.3. Otherwise, ${HOME}/.kube/config is used and no merging takes place.
可用命令:
current-context 显示当前contexts
delete-cluster 从kubeconfig中刪除指定的集群
delete-context 从kubeconfig中刪除指定的上下文
get-clusters 显示kubeconfig中定义的集群
get-contexts 描述一个或多个contexts
rename-context 在kubeconfig中给一个context改名
set 在kubeconfig中设置单个值
set-cluster 在kubeconfig中设置一个集群
set-context 在kubeconfig中设置一个context
set-credentials 在kubeconfig中设置一个用户
unset 取消设置
use-context 在kubeconfig中设置current-context
view 显示合并后的kubeconfig设置或指定kubeconfig文件
kubectl的命令可以分为三类:
1.集群访问配置:kubectl config
配置kubectl管理的kubernetes集群的配置信息,与Linux中的命令行不同的是,命令行的设置直接操控文件.
(1)kubectl config view:查看当前节点的kubeconfig配置信息.
kubernetes可以有多个集群,一个集群又可以配置无数过service,多层级有利于梳理计算机资源。
打印文件的内容,密钥数据省略.
root@VM-16-6-ubuntu:~# cat /etc/kubernetes/admin.conf
apiVersion: v1
clusters:-cluster:
certificate-authority-data: ...
server: https://148.70.251.10: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: ...
client-key-data: ...
通过kubectl config view可以查看的相同的信息.
root@VM-16-6-ubuntu:~# kubectl config view
apiVersion: v1
clusters:-cluster:
certificate-authority-data: REDACTED
server: https://148.70.251.10: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
(2)kubectl config set-cluster:添加集群
root@VM-16-6-ubuntu:~# kubectl config set-cluster k8s1 --server=https://1.2.3.4
Cluster "k8s1" set.
查看配置文件:
root@VM-16-6-ubuntu:~# head -5 /etc/kubernetes/admin.conf
apiVersion: v1
clusters:-cluster:
server: https://1.2.3.4
name: k8s1
确认已经写入了配置文件.
root@VM-16-6-ubuntu:~# kubectl config view
apiVersion: v1
clusters:- cluster:
server: https://1.2.3.4
name: k8s1-cluster:
certificate-authority-data: REDACTED
server: https://148.70.251.10: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
(3)kubectl config get-clusters:查看kubeconfig中所有的cluster
root@VM-16-6-ubuntu:~# kubectl config get-clusters
NAME
k8s1
kubernetes
(4)kubectl config delete-cluster:刪除某个cluster
root@VM-16-6-ubuntu:~# kubectl config delete-cluster k8s1
deleted cluster k8s1 from/etc/kubernetes/admin.conf
root@VM-16-6-ubuntu:~# kubectl config get-clusters
NAME
kubernetes
(5)kubectl config get-context:获取所有的context
kubernetes中context类似“用户”的意思,这是多租户使用的的前提。
root@VM-16-6-ubuntu:~# kubectl config current-context
kubernetes-admin@kubernetes
(6)kubectl config set-context:添加一个context
root@VM-16-6-ubuntu:~# kubectl config set-context admin1@k8s1 --user=admin1
Context"admin1@k8s1"created.
root@VM-16-6-ubuntu:~# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
admin1@k8s1 admin1* kubernetes-admin@kubernetes kubernetes kubernetes-admin
(7)kubectl config delete-context:刪除一个context
root@VM-16-6-ubuntu:~# kubectl config delete-context admin1@k8s1
deleted context admin1@k8s1 from/etc/kubernetes/admin.conf
root@VM-16-6-ubuntu:~# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE* kubernetes-admin@kubernetes kubernetes kubernetes-admin
(8)kubectl config current-context:查看当前所使用的context
root@VM-16-6-ubuntu:~# kubectl config current-context
kubernetes-admin@kubernetes
(9)kubectl config use-context:切换context
root@VM-16-6-ubuntu:~# kubectl config set-context admin1@k8s1 --user=admin1
Context"admin1@k8s1"created.
root@VM-16-6-ubuntu:~# kubectl config use-context admin1@k8s1
Switched to context"admin1@k8s1".
root@VM-16-6-ubuntu:~# kubectl config current-context
admin1@k8s1
(10)kubectl config set-credentials:添加一个用户
root@VM-16-6-ubuntu:~# kubectl config set-credentials admin1 --username=admin1 --password=abcd
User"admin1" set.
在kubeconfig中可以看到如下信息:
users:-name: admin1
user:
password: abcd
username: admin1
2.集群控制:kubectl create/apply/delete/label/edit/expose/scale
(1)kubectl create:创建pod
编写配置文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-example
spec:
replicas:2selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:-name: nginx
image: nginx:1.10
集群创建以及查看:
root@VM-16-6-ubuntu:~/test# kubectl create -f nginx-deployment.yaml
deployment.apps"deployment-example"created
root@VM-16-6-ubuntu:~/test# kubectl get pods
NAME READY STATUS RESTARTS AGE
deployment-example-9956dd665-prkn9 0/1 ContainerCreating 044s
deployment-example-9956dd665-wwbvr 0/1 ContainerCreating 044s
root@VM-16-6-ubuntu:~/test# kubectl get pods
NAME READY STATUS RESTARTS AGE
deployment-example-9956dd665-prkn9 1/1 Running 04m
deployment-example-9956dd665-wwbvr 1/1 Running 04m
#显示标签信息:
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-prkn9 1/1 Running 0 13m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-wwbvr 1/1 Running 0 13m app=nginx,pod-template-hash=551288221
(2)给pod打标签
root@VM-16-6-ubuntu:~/test# kubectl label pods/deployment-example-9956dd665-wwbvr status=healthy
pod"deployment-example-9956dd665-wwbvr"labeled
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-prkn9 1/1 Running 0 14m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-wwbvr 1/1 Running 0 14m app=nginx,pod-template-hash=551288221,status=healthy
(3)编辑pod的配置文件
root@VM-16-6-ubuntu:~/test# kubectl edit deployment/deployment-example
deployment.extensions"deployment-example" edited
这个文件属于临时文件,现在将pod中的容器数量replicas变更为4。
查看pods信息:
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-jpbvw 1/1 Running 0 10s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-pmng2 1/1 Running 0 10s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-prkn9 1/1 Running 0 17m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-wwbvr 1/1 Running 0 17m app=nginx,pod-template-hash=551288221,status=healthy
(4)使用kubectl scale也可以操作pod的yaml文件配置
直接修改配置文件的内容,而不需要打开文件。
root@VM-16-6-ubuntu:~/test# kubectl scale --replicas=10 deployment/deployment-example
deployment.extensions"deployment-example"scaled
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-246zt 1/1 Running 0 8s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-424r4 1/1 Running 0 8s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-jpbvw 1/1 Running 0 14m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-pdcff 1/1 Running 0 8s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-pmng2 1/1 Running 0 14m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-prkn9 1/1 Running 0 32m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-rwq8t 1/1 Running 0 8s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-tnk99 1/1 Running 0 8s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-vsbqk 1/1 Running 0 8s app=nginx,pod-template-hash=551288221deployment-example-9956dd665-wwbvr 1/1 Running 0 32m app=nginx,pod-template-hash=551288221,status=healthy
(5)通过kubectl apply恢复原始配置
root@VM-16-6-ubuntu:~/test# kubectl apply -f nginx-deployment.yaml
Warning: kubectl apply should be used on resource created by either kubectl create--save-config or kubectl apply
deployment.apps"deployment-example"configured
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-246zt 0/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-424r4 0/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-jpbvw 0/1 Terminating 0 17m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-pdcff 0/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-pmng2 0/1 Terminating 0 17m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-prkn9 1/1 Running 0 35m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-rwq8t 1/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-vsbqk 0/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-wwbvr 1/1 Running 0 35m app=nginx,pod-template-hash=551288221,status=healthy
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-246zt 0/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-jpbvw 0/1 Terminating 0 17m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-pdcff 0/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-prkn9 1/1 Running 0 35m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-rwq8t 0/1 Terminating 0 3m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-wwbvr 1/1 Running 0 35m app=nginx,pod-template-hash=551288221,status=healthy
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-prkn9 1/1 Running 0 35m app=nginx,pod-template-hash=551288221deployment-example-9956dd665-wwbvr 1/1 Running 0 35m app=nginx,pod-template-hash=551288221,status=healthy
(6)通过kubectl delete删除pod
root@VM-16-6-ubuntu:~/test#kubectl delete -f nginx-deployment.yaml
deployment.apps"deployment-example"deleted
root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deployment-example-9956dd665-prkn9 0/1 Terminating 0 37m app=nginx,pod-template-hash=551288221root@VM-16-6-ubuntu:~/test# kubectl get pods --show-labels
No resources found.
3.集群查看和问题调试:kubectl get/describe/logs/exec/attach
(1)kubectl get:获取对象的信息,可以是pod、node等
root@VM-16-6-ubuntu:~/test# kubectl get pods
NAME READY STATUS RESTARTS AGE
deployment-example-9956dd665-2ksc4 1/1 Running 010m
deployment-example-9956dd665-rdwwc 1/1 Running 010m
root@VM-16-6-ubuntu:~/test# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-0-3-ubuntu Ready 2d v1.10.2vm-16-6-ubuntu Ready master 2d v1.10.2vm-16-8-ubuntu Ready 2d v1.10.2
(2)kubeadm descrbe:查看特定资源或资源组的描述信息
root@VM-16-6-ubuntu:~/test# kubectl describe pods/deployment-example-9956dd665-rdwwc
Name: deployment-example-9956dd665-rdwwc
Namespace: default
Node: vm-16-8-ubuntu/172.27.16.8Start Time: Fri,21 Jun 2019 22:32:45 +0800Labels: app=nginx
pod-template-hash=551288221Annotations:Status: Running
IP:192.168.20.1Controlled By: ReplicaSet/deployment-example-9956dd665
Containers:
nginx:
Container ID: docker://dd4f3ca81bbc5e6dc56f33d3c3bdb1700212e65a6024956e2bf45fc81614ee42
Image: nginx:1.10Image ID: docker-pullable://nginx@sha256:6202beb06ea61f44179e02ca965e8e13b961d12640101fca213efbfd145d7575
Port: Host Port:State: Running
Started: Fri,21 Jun 2019 22:32:46 +0800Ready: True
Restart Count:0Environment:Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-44qwv (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-44qwv:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-44qwv
Optional:falseQoS Class: BestEffort
Node-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute for300s
node.kubernetes.io/unreachable:NoExecute for300s
Events:
Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 50s default-scheduler Successfully assigned deployment-example-9956dd665-rdwwc to vm-16-8-ubuntu
Normal SuccessfulMountVolume 50s kubelet, vm-16-8-ubuntu MountVolume.SetUp succeeded for volume "default-token-44qwv"Normal Pulled 49s kubelet, vm-16-8-ubuntu Container image "nginx:1.10"already present on machine
Normal Created 49s kubelet, vm-16-8-ubuntu Created container
Normal Started 49s kubelet, vm-16-8-ubuntu Started container
(3)kubeadm exec在容器内执行命令
root@VM-16-6-ubuntu:~/test# kubectl exec deployment-example-9956dd665-rdwwc -- cat /etc/nginx/nginx.conf
user nginx;
worker_processes1;
error_log/var/log/nginx/error.log warn;
pid/var/run/nginx.pid;
events {
worker_connections1024;
}
http {
include/etc/nginx/mime.types;
default_type application/octet-stream;
log_format main'$remote_addr - $remote_user [$time_local] "$request"'
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"';
access_log/var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout65;
#gzipon;
include/etc/nginx/conf.d/*.conf;
}
(4)kubectl logs查看容器的日志输出
root@VM-16-6-ubuntu:~/test# kubectl logs pods/deployment-example-9956dd665-rdwwc
使用-f参数可以查看实时日志输出。
(5)kubectl attach进入到容器内部
root@VM-16-6-ubuntu:~/test# kubectl attach deployment-example-9956dd665-rdwwc
更多推荐
所有评论(0)