k8s-demo集群搭建详细步骤09:安装命令行工具kubectl v1.23.5并配置集群管理员账户

349 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

kubectl是一个命令行工具,通过访问apiserver的接口,对集群进行操作管理
k8s-demo集群有3个master节点和3个node节点,为了方便操作,kubectl部署在3个master节点上
可以只部署在master1上,也可以部署在所有节点上,根据实际需要部署
下载页面 kubernetes.io/docs/tasks/…
或者 www.downloadkubernetes.com
命令行参数参考 kubernetes.io/docs/refere…

一、下载kubectl

[root@master1 ~]# cd /opt/install/soft
[root@master1 sfot]# curl -LO https://dl.k8s.io/release/v1.23.5/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   154  100   154    0     0     43      0  0:00:03  0:00:03 --:--:--    43
100 44.4M  100 44.4M    0     0  4953k      0  0:00:09  0:00:09 --:--:-- 10.8M
[root@master1 soft]# chmod +x kubectl
[root@master1 soft]# ll kubectl
-rwxr-xr-x 1 root root 46596096 4月   9 10:52 kubectl
[root@master1 soft]# mv kubectl /opt/k8s/bin/
[root@master1 soft]# kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
[root@master1 soft]# wget https://dl.k8s.io/v1.23.5/bin/linux/amd64/mounter
[root@master1 soft]# chmod +x mounter
[root@master1 soft]# mv mounter /opt/k8s/bin/
[root@master1 soft]# wget https://dl.k8s.io/v1.23.5/bin/linux/amd64/kubeadm
[root@master1 soft]# chmod +x kubeadm
[root@master1 soft]# mv kubeadm /opt/k8s/bin
[root@master1 cert]# kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:52:18Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}

二、把kubectl分发到3个master节点

[root@master1 ~]# cd /opt/k8s/bin/
[root@master1 bin]# for node_ip in ${MASTER_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp /opt/k8s/bin/{kubeadm,mounter,kubectl} root@${node_ip}:/opt/k8s/bin/
    ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
  done
>>> 192.168.66.131
kubeadm                   100%   43MB 228.5MB/s   00:00
mounter                   100% 1404KB 217.9MB/s   00:00
kubectl                   100%   44MB 225.5MB/s   00:00
>>> 192.168.66.132
kubeadm                   100%   43MB 139.9MB/s   00:00
mounter                   100% 1404KB  81.9MB/s   00:00
kubectl                   100%   44MB 147.8MB/s   00:00
>>> 192.168.66.133
kubeadm                   100%   43MB 126.6MB/s   00:00
mounter                   100% 1404KB  92.4MB/s   00:00
kubectl                   100%   44MB 156.1MB/s   00:00
[root@master1 bin]#

三、配置集群管理员账户 kubeconfig

[root@master1 ~]# mkdir -p /opt/install/kubeconfig
[root@master1 ~]# cd /opt/install/kubeconfig

## 设置集群参数
[root@master1 kubeconfig]# kubectl config set-cluster k8s-demo \
  --certificate-authority=/opt/k8s/etc/cert/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=kubectl.kubeconfig

## 设置客户端认证参数
[root@master1 kubeconfig]# kubectl config set-credentials k8s-demo-admin \
  --client-certificate=/opt/k8s/etc/cert/kubectl-admin.pem \
  --client-key=/opt/k8s/etc/cert/kubectl-admin-key.pem \
  --embed-certs=true \
  --kubeconfig=kubectl.kubeconfig

## 设置上下文参数  用户名 k8s-demo-admin
[root@master1 kubeconfig]# kubectl config set-context k8s-demo-admin-ctx \
  --cluster=k8s-demo --user=k8s-demo-admin \
  --kubeconfig=kubectl.kubeconfig

## 设置默认上下文
[root@master1 kubeconfig]# kubectl config use-context k8s-demo-admin-ctx \
  --kubeconfig=kubectl.kubeconfig
  
[root@master1 kubeconfig]# ll
总用量 8
-rw------- 1 root root 6427 4月   9 10:26 kubectl.kubeconfig
[root@master1 kubeconfig]#
  • /opt/install/kubeconfig 是临时存放目录
  • --embed-certs=true:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中,否则写入的是证书文件路径后续拷贝 kubeconfig 到其它机器时,还需要单独拷贝证书文件,有点不方便

kubeconfig.png

四、把kubeconfig分发到3个master节点

[root@master1 ~]# cd /opt/install/kubeconfig
[root@master1 kubeconfig]# for node_ip in ${MASTER_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p ~/.kube"
    scp kubectl.kubeconfig root@${node_ip}:~/.kube/config
  done
>>> 192.168.66.131
kubectl.kubeconfig                   100% 6427     6.5MB/s   00:00
>>> 192.168.66.132
kubectl.kubeconfig                   100% 6427     3.9MB/s   00:00
>>> 192.168.66.133
kubectl.kubeconfig                   100% 6427     5.0MB/s   00:00
[root@master1 kubeconfig]#

五、kubectl命令行简介(这一步暂时可以跳过,等集群其他组件都安装完成后再来试试)

1、查看资源缩写

[root@master1 ~]# kubectl api-resources 
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
bindings                                                                      true         Binding
componentstatuses                 cs                                          false        ComponentStatus
configmaps                        cm                                          true         ConfigMap
endpoints                         ep                                          true         Endpoints
events                            ev                                          true         Event
limitranges                       limits                                      true         LimitRange
namespaces                        ns                                          false        Namespace
nodes                             no                                          false        Node
persistentvolumeclaims            pvc                                         true         PersistentVolumeClaim
persistentvolumes                 pv                                          false        PersistentVolume
pods                              po                                          true         Pod
podtemplates                                                                  true         PodTemplate
replicationcontrollers            rc                                          true         ReplicationController
resourcequotas                    quota                                       true         ResourceQuota
secrets                                                                       true         Secret
serviceaccounts                   sa                                          true         ServiceAccount
services                          svc                                         true         Service
mutatingwebhookconfigurations                  admissionregistration.k8s.io   false        MutatingWebhookConfiguration
validatingwebhookconfigurations                admissionregistration.k8s.io   false        ValidatingWebhookConfiguration
customresourcedefinitions         crd,crds     apiextensions.k8s.io           false        CustomResourceDefinition
apiservices                                    apiregistration.k8s.io         false        APIService
controllerrevisions                            apps                           true         ControllerRevision
daemonsets                        ds           apps                           true         DaemonSet
deployments                       deploy       apps                           true         Deployment
replicasets                       rs           apps                           true         ReplicaSet
statefulsets                      sts          apps                           true         StatefulSet
auditsinks                                     auditregistration.k8s.io       false        AuditSink
tokenreviews                                   authentication.k8s.io          false        TokenReview
localsubjectaccessreviews                      authorization.k8s.io           true         LocalSubjectAccessReview
selfsubjectaccessreviews                       authorization.k8s.io           false        SelfSubjectAccessReview
selfsubjectrulesreviews                        authorization.k8s.io           false        SelfSubjectRulesReview
subjectaccessreviews                           authorization.k8s.io           false        SubjectAccessReview
horizontalpodautoscalers          hpa          autoscaling                    true         HorizontalPodAutoscaler
cronjobs                          cj           batch                          true         CronJob
jobs                                           batch                          true         Job
certificatesigningrequests        csr          certificates.k8s.io            false        CertificateSigningRequest
leases                                         coordination.k8s.io            true         Lease
bgpconfigurations                              crd.projectcalico.org          false        BGPConfiguration
bgppeers                                       crd.projectcalico.org          false        BGPPeer
blockaffinities                                crd.projectcalico.org          false        BlockAffinity
clusterinformations                            crd.projectcalico.org          false        ClusterInformation
felixconfigurations                            crd.projectcalico.org          false        FelixConfiguration
globalnetworkpolicies                          crd.projectcalico.org          false        GlobalNetworkPolicy
globalnetworksets                              crd.projectcalico.org          false        GlobalNetworkSet
hostendpoints                                  crd.projectcalico.org          false        HostEndpoint
ipamblocks                                     crd.projectcalico.org          false        IPAMBlock
ipamconfigs                                    crd.projectcalico.org          false        IPAMConfig
ipamhandles                                    crd.projectcalico.org          false        IPAMHandle
ippools                                        crd.projectcalico.org          false        IPPool
kubecontrollersconfigurations                  crd.projectcalico.org          false        KubeControllersConfiguration
networkpolicies                                crd.projectcalico.org          true         NetworkPolicy
networksets                                    crd.projectcalico.org          true         NetworkSet
endpointslices                                 discovery.k8s.io               true         EndpointSlice
events                            ev           events.k8s.io                  true         Event
ingresses                         ing          extensions                     true         Ingress
flowschemas                                    flowcontrol.apiserver.k8s.io   false        FlowSchema
prioritylevelconfigurations                    flowcontrol.apiserver.k8s.io   false        PriorityLevelConfiguration
nodes                                          metrics.k8s.io                 false        NodeMetrics
pods                                           metrics.k8s.io                 true         PodMetrics
alertmanagerconfigs                            monitoring.coreos.com          true         AlertmanagerConfig
alertmanagers                                  monitoring.coreos.com          true         Alertmanager
podmonitors                                    monitoring.coreos.com          true         PodMonitor
probes                                         monitoring.coreos.com          true         Probe
prometheuses                                   monitoring.coreos.com          true         Prometheus
prometheusrules                                monitoring.coreos.com          true         PrometheusRule
servicemonitors                                monitoring.coreos.com          true         ServiceMonitor
thanosrulers                                   monitoring.coreos.com          true         ThanosRuler
ingressclasses                                 networking.k8s.io              false        IngressClass
ingresses                         ing          networking.k8s.io              true         Ingress
networkpolicies                   netpol       networking.k8s.io              true         NetworkPolicy
runtimeclasses                                 node.k8s.io                    false        RuntimeClass
poddisruptionbudgets              pdb          policy                         true         PodDisruptionBudget
podsecuritypolicies               psp          policy                         false        PodSecurityPolicy
clusterrolebindings                            rbac.authorization.k8s.io      false        ClusterRoleBinding
clusterroles                                   rbac.authorization.k8s.io      false        ClusterRole
rolebindings                                   rbac.authorization.k8s.io      true         RoleBinding
roles                                          rbac.authorization.k8s.io      true         Role
priorityclasses                   pc           scheduling.k8s.io              false        PriorityClass
podpresets                                     settings.k8s.io                true         PodPreset
csidrivers                                     storage.k8s.io                 false        CSIDriver
csinodes                                       storage.k8s.io                 false        CSINode
storageclasses                    sc           storage.k8s.io                 false        StorageClass
volumeattachments                              storage.k8s.io                 false        VolumeAttachment
[root@master1 ~]# kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta2
internal.apiserver.k8s.io/v1alpha1
networking.k8s.io/v1
node.k8s.io/v1
node.k8s.io/v1alpha1
node.k8s.io/v1beta1
policy/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1alpha1
storage.k8s.io/v1beta1
v1
[root@master1 ~]#

2、配置kubectl命令行自动补全

[root@master1 ~]# yum install bash-completion -y

在 ~/.bashrc 中添加一行 source <(kubectl completion bash)

kubectl.png

3、探索更多的kubectl命令功能

试着输入下面的命令看看能得到什么

[root@master1 ~]# kubectl explain pod
[root@master1 ~]# kubectl explain pod.spec

六、k8s日志级别

在后续安装过程中,如果遇到问题,想查看具体的错误信息,或者查看API调用的参数详细数据,可以添加命令行参数 --v=9
后续在 kube-apiserver.service 等服务启动脚本中设定为“--v=2”,请留意

日志级别含义
--v=0通常对集群操作员可见的有用信息
Generally useful for this to ALWAYS be visible to an operator.
--v=1合理简化的默认日志级别
A reasonable default log level if you don’t want verbosity.
--v=2有关服务的有用稳态信息和可能与系统中的重大变化相关的重要日志消息。这是大多数系统推荐的默认日志级别。
Useful steady state information about the service and important log messages that may correlate to significant changes in the system. This is the recommended default log level for most systems.
--v=3有关更改的扩展信息
Extended information about changes.
--v=4调试级别
Debug level verbosity.
--v=5跟踪级别
Trace level verbosity.
--v=6显示请求的资源
Display requested resources.
--v=7显示 HTTP 请求标头
Display HTTP request headers.
--v=8显示 HTTP 请求内容
Display HTTP request contents
--v=9显示 HTTP 请求完整内容,即不截断参数内容
Display HTTP request contents without truncation of contents.

例如:

[root@master1 install]# kubectl get nodes --v=6
I0425 22:52:54.364543   18327 loader.go:372] Config loaded from file:  /root/.kube/config
I0425 22:52:54.378667   18327 round_trippers.go:553] GET https://127.0.0.1:8443/api/v1/nodes?limit=500 200 OK in 8 milliseconds
NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   21h   v1.23.5
master2   Ready    master   21h   v1.23.5
master3   Ready    master   21h   v1.23.5
node1     Ready    node     21h   v1.23.5
node2     Ready    node     21h   v1.23.5
node3     Ready    node     21h   v1.23.5
[root@master1 install]#

参考


  • 先用起来,通过操作实践认识kubernetes(k8s),积累多了自然就理解了
  • 把理解的知识分享出来,自造福田,自得福缘
  • 追求简单,容易使人理解,知识的上下文也是知识的一部分,例如版本,时间等
  • 欢迎留言交流,也可以提出问题,一般在周末回复和完善文档
  • Jason@vip.qq.com 2022-4-9