搜索本产品文档关键词
通过kubectl连接集群
所有文档
menu

容器引擎 CCE

通过kubectl连接集群

通过kubectl连接Kubernetes集群

如果用户需要从本地个人计算机连接到百度智能云的 Kubernetes 集群,需要使用 Kubernetes 命令行客户端 kubectl。kubectl 是 Kubernetes 提供的一种命令行工具,它用于与 Kubernetes 集群进行交互,帮助用户管理集群中的资源、查看集群状态、部署应用程序、进行调试等操作。通过 kubectl,您可以方便地在命令行界面上执行集群管理任务。可以选择两种访问方式:

  • 内网访问:客户端通过内网IP地址与集群的API Server进行通信,数据流量不会经过互联网,安全性更强。
  • 公网访问:集群的API Server会暴露一个公共接口,客户端可以通过互联网访问Kubernetes集群。注意:公网访问需要集群开启 API Server 公网访问。

前提条件

  • 已创建集群。详细操作,请参见 创建集群

操作步骤

使用 kubectl 连接集群时,您需要先在客户端中安装 kubectl。随后在集群中下载 kubectl 配置文件,并复制至客户端,在客户端中完成相关配置后即可访问对应的 CCE 集群。使用kubectl连接集群的具体步骤如下:

注意:

本操作指南给出的操作步骤都是基于linux操作环境的。

  1. 下载kubectl
    您需要准备一台可访问公网的客户端计算机。从 Kubernetes 版本下载页面 下载对应的 kubectl 客户端,并通过命令行方式安装kubectl。如果已经安装kubectl,则跳过此步骤,您可执行kubectl version命令判断是否已安装kubectl。关于kubectl 的其他信息,可以参见 kubernetes 官方安装和设置 kubectl 文档
    a.登录到您的客户端计算机,下载kubectl。

    Plain Text
    1```
    2cd /home 
    3curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl
    4```

    其中{v1.25.0}为指定的版本号,请根据集群版本进行替换。

    b.安装kubectl。

    Plain Text
    1```
    2chmod +x kubectl
    3mv -f kubectl /usr/local/bin
    4``` 
  2. 下载集群凭证
    可在集群列表查看集群凭证,也可在集群详情页查看集群凭证

a. VPC访问凭证:在查看集群凭证弹窗,选择VPC访问凭证,单击下载长期访问凭证,或下载临时访问凭证,获取集群私网访问凭证。
image.png

b.公网访问凭证:在集群基本信息页签下的集群连接模块,查看 API Server 公网访问 是否已开启。 若未打开 API Server 公网访问,请选择开启。在查看集群凭证弹窗,选择公网访问凭证,单击下载长期访问凭证,或下载临时访问凭证下载集群公网访问凭证。
image.png

  1. 配置kubectl:将下载的集群凭证放在 kubectl 的默认配置路径。
    a.登录到您的客户端计算机,复制步骤3中下载的访问凭证文件(以kubeconfig.yaml为例)到您客户端机器的/home目录下。
    b.配置kubectl文件。

    Plain Text
    1cd /home
    2mkdir -p $HOME/.kube
    3mv -f kubeconfig.yaml $HOME/.kube/config

    c.根据使用场景,切换kubectl的访问模式。

    • VPC 内网接入访问请执行:
    Plain Text
    1kubectl config use-context internal
    • 互联网接入访问请执行(集群需绑定公网地址):
    Plain Text
    1kubectl config use-context external
  2. 配置完成后,在客户端中执行以下命令,检查客户端能否通过kubectl连接集群。

    Plain Text
    1kubectl cluster-info    # 查看集群信息

    若回显结果如下,则说明客户端能够通过kubectl连接集群。

    Plain Text
    1Kubernetes control plane is running at https://xx.xx.xx.xx:5443
    2CoreDNS is running at https://xx.xx.xx.xx:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
    3To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

通过kubectl创建简单的服务

创建一个nginx应用

这个命令假设kubectl命令行工具已经在PATH中,且有权限操作kubernetes集群(即已完成通过kubectl连接Kubernetes集群的操作)输入以下指令:

Plain Text
1kubectl create deployment  my-nginx --image=registry.baidubce.com/cce/nginx-alpine-go:latest --replicas=3 --port=80

上述命令会创建3个nginx容器,每个容器都会暴露它的80端口。

查看创建nginx容器状态的指令如下:

Plain Text
1$ kubectl get pods
2NAME                       READY     STATUS    RESTARTS   AGE
3my-nginx-858393261-pfjdn   1/1       Running   0          14s
4my-nginx-858393261-sn7g5   1/1       Running   0          14s
5my-nginx-858393261-spv8w   1/1       Running   0          14s

注意: 符号"$"代表输入的指令,其他行代表输入指令后显示的容器的信息。

暴露服务到internet

创建服务

在公有云环境下,可以通过输入命令,创建出一个类型为LoadBalancer的service,同时,还会联动公有云,创建一个负载均衡和一个公网IP,具体操作指令如下:

Plain Text
1kubectl expose deployment my-nginx --port=80 --type=LoadBalancer

注意:

负载均衡:通过将同一区域的多台百度智能云服务器虚拟成一个组,设置一个内网或外网的服务地址,将前端并发访问转发给后台多台云服务器,实现应用程序的流量均衡。您可以通过查询服务获取的公网IP,在百度智能云控制台中的负载均衡BLB页面找到您创建的BLB实例,其收费标准请参考负载均衡BLB定价。 公网IP:作为一个独立的商品为用户提供公网带宽服务。您可以通过查看服务来查询您创建的公网IP地址,其收费标准请参考弹性公网IP EIP的定价,且自动默认计费标准为后付费。

查看服务

  1. 通过查看服务的命令,可以看到这个服务的情况和创建出的公网IP。

    Plain Text
    1$ kubectl get services
    2NAME         CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
    3kubernetes   172.17.0.1    <none>           443/TCP        1h
    4my-nginx     172.17.44.5   180.76.139.247   80:30356/TCP   47s
  2. 通过访问180.76.139.247这个链接可以看到创建的服务如图所示:

注意: 符号"$"代表输入的指令,其他行代表输入指令后显示的服务信息,其中180.76.139.247 为发布到外网的服务网址。 服务使用负载均衡除了上述指令调用之外,还可以通过Dashboard调用具体操作参考Kubernetes Dashboard创建服务

删除服务

如果需要删除服务,不想将对公网暴露。可以直接删除服务

Plain Text
1kubectl delete svc my-nginx

注意:

kubernetes会将刚才创建出的公网IP和负载均衡删除,然后也会删除创建的这个服务。

本地访问 Kubernetes Dashboard (Web UI)

前提条件

在本地使用 Kubernetes Dashboard 前,用户需要先配置好kubectl,能通过kubectl连接百度智能云的 Kubernetes 集群。

操作步骤

  1. 创建Dashboard服务。在本地通过kubectl工具,可以在kubernetes集群里创建一个Dashboard应用。

    Plain Text
    1$ kubectl create -f dashboard.yaml
    2secret "kubernetes-dashboard-certs" created
    3serviceaccount "kubernetes-dashboard" created
    4clusterrolebinding "kubernetes-dashboard" created
    5deployment "kubernetes-dashboard" created
    6service "kubernetes-dashboard" created

对应的dashboard.yaml文件为:

Plain Text
1    apiVersion: v1
2    kind: Secret
3    metadata:
4      labels:
5        k8s-app: kubernetes-dashboard
6      name: kubernetes-dashboard-certs
7      namespace: kube-system
8    type: Opaque
9
10    ---
11
12    apiVersion: v1
13    kind: ServiceAccount
14    metadata:
15      labels:
16        k8s-app: kubernetes-dashboard
17      name: kubernetes-dashboard
18      namespace: kube-system
19
20    ---
21
22    apiVersion: rbac.authorization.k8s.io/v1beta1
23    kind: ClusterRoleBinding
24    metadata:
25      name: kubernetes-dashboard
26      labels:
27        k8s-app: kubernetes-dashboard
28    roleRef:
29      apiGroup: rbac.authorization.k8s.io
30      kind: ClusterRole
31      name: cluster-admin
32    subjects:
33    - kind: ServiceAccount
34      name: kubernetes-dashboard
35      namespace: kube-system
36
37    ---
38
39    kind: Deployment
40    apiVersion: apps/v1
41    metadata:
42      labels:
43        k8s-app: kubernetes-dashboard
44      name: kubernetes-dashboard
45      namespace: kube-system
46    spec:
47      replicas: 1
48      revisionHistoryLimit: 10
49      selector:
50        matchLabels:
51          k8s-app: kubernetes-dashboard
52      template:
53        metadata:
54          labels:
55            k8s-app: kubernetes-dashboard
56        spec:
57          containers:
58          - name: kubernetes-dashboard
59            image: registry.baidubce.com/public/dashboard:v1.8.3-caas
60            ports:
61            - containerPort: 8443
62              protocol: TCP
63            args:
64              - --auto-generate-certificates
65            volumeMounts:
66            - name: kubernetes-dashboard-certs
67              mountPath: /certs
68            - mountPath: /tmp
69              name: tmp-volume
70            livenessProbe:
71              httpGet:
72                scheme: HTTPS
73                path: /
74                port: 8443
75              initialDelaySeconds: 30
76              timeoutSeconds: 30
77          volumes:
78          - name: kubernetes-dashboard-certs
79            secret:
80              secretName: kubernetes-dashboard-certs
81          - name: tmp-volume
82            emptyDir: {}
83          serviceAccountName: kubernetes-dashboard
84          tolerations:
85          - key: node-role.kubernetes.io/master
86            effect: NoSchedule
87
88    ---
89    kind: Service
90    apiVersion: v1
91    metadata:
92      labels:
93        k8s-app: kubernetes-dashboard
94      name: kubernetes-dashboard
95      namespace: kube-system
96    spec:
97      ports:
98        - port: 443
99          targetPort: 8443
100      selector:
101        k8s-app: kubernetes-dashboard
  1. 在创建好dashboard之后,使用kubectl proxy命令开启一个代理,连接到Kubernetes API Server。

    Plain Text
    1kubectl proxy
  2. 成功开启代理后,可以在本地浏览器中访问http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login,连接到Dashboard。

注意:

localhost 是指的用户使用的本地机器,而不是虚拟机,且对应的IP地址为:127.0.0.1

通过Kubernetes-Dashboard创建服务

  1. 完成本地访问 Kubernetes Dashboard (Web UI)后,进入Dshboard页面,点击右上角创建,开始创建服务;

  2. 进入创建应用页面,输入要创建的应用名称,容器镜像,容器组(Pod)数量;

  3. 服务中选择外部, 后台会完成EIP和BLB的创建,端口配置分别填写80,80,协议选择TCP,然后点击部署按钮开始服务创建;

  4. 等待服务创建成功,且页面需要手动刷新;

  5. 在创建成功页面点击服务按钮,进入服务页面;

  6. 在此页面中会显示服务的外网地址;

  7. 在浏览器中输入外网地址,显示服务创建成功;

使用私有镜像创建服务

如果用户需要使用私有镜像,需要先配置ImagePullSecrets,同时在创建的资源中指明此ImagePullSecrets。下面简要介绍创建步骤,更加详细的关于ImagePullSecrets的信息,可以参考Kubernetes官方文档

  1. 通过kubectl创建ImagePullSecrets

    首先,用户需要有私有仓库空间的用户名密码,通过以下命令,可以创建出名为myregistrykey的ImagePullSecret

    Plain Text
    1$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
    2
    3secret "myregistrykey" created.
  2. 在需要创建的资源中使用此ImagePullSecret

    例如,下面的pod yaml文件里指明此Pod使用私有镜像registry.baidubce.com/private-online/awesomeapp:v1,同时通过myregistrykey这个imagePullSecrets去镜像仓库拉取镜像。

    Plain Text
    1  apiVersion: v1
    2  kind: Pod
    3  metadata:
    4    name: foo
    5    namespace: awesomeapps
    6  spec:
    7    containers:
    8      - name: foo
    9        image: registry.baidubce.com/private-online/awesomeapp:v1
    10    imagePullSecrets:
    11      - name: myregistrykey
  3. 在dashboard中指定创建服务的ImagePullSecrets

    在通过kubectl创建成功ImagePullSecrets后,在dashboard中创建应用时,也能选择使用ImagePullSecret。 例如下图中:


我们为即将创建的应用选择了前文创建的`myregistrykey`,这样kubernetes就有权限区拉取私有仓库的镜像了。

windows 下使用kubectl

  1. 创建集群之后,下载windows版本的kubectl工具,例如64位的工具如下:

注意: 下载kubectl之前,用户需要先登录自己的服务器使用指令kubectl version查看自己创建的集群的版本号,然后选择对应的kubectl版本进行下载。例如:用户的集群版本号为1.8,则需要下载的kubectl为1.8版。下载链接为https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/README.md,用户根据自己集群版本号,下载相应版本的工具。

  1. 下载之后,将其解压到任意目录,例如放在D盘下
  2. 在 目录C:\users\下进入用户的文件夹,例如用户名为foo,则文件夹应该为C:\users\foo,同时进入此目录,创建文件夹.kube

  3. 在集群列表页面,下载集群配置文件,放在上一步创建的.kube文件夹中,并且重名名为config

  4. 打开windows命令行提示符

  5. 进入kubectl文件存放的目录,运行kubectl.exe get node可以查看集群的节点。

  6. 在同一个目录下,创建dashboard.yaml文件,其内容是前文中的dashboard.yaml,例如可以用记事本创建:

  7. 然后输入kubectl.exe create -f dashboard.yaml创建dashboard

  8. 通过kubectl.exe get pod --all-namespaces命令可以查看是否创建成功

  9. 输入kubectl.exe proxy可以打开proxy,然后在浏览器中访问127.0.0.1:8001/ui 即可以访问dashboard



上一篇
操作集群
下一篇
CCE节点资源预留说明