通过kubectl连接集群
通过kubectl连接Kubernetes集群
如果用户需要从本地个人计算机连接到百度智能云的 Kubernetes 集群,需要使用 Kubernetes 命令行客户端 kubectl。kubectl 是 Kubernetes 提供的一种命令行工具,它用于与 Kubernetes 集群进行交互,帮助用户管理集群中的资源、查看集群状态、部署应用程序、进行调试等操作。通过 kubectl,您可以方便地在命令行界面上执行集群管理任务。可以选择两种访问方式:
- 内网访问:客户端通过内网IP地址与集群的API Server进行通信,数据流量不会经过互联网,安全性更强。
- 公网访问:集群的API Server会暴露一个公共接口,客户端可以通过互联网访问Kubernetes集群。注意:公网访问需要集群开启 API Server 公网访问。
前提条件
- 已创建集群。详细操作,请参见 创建集群。
操作步骤
使用 kubectl 连接集群时,您需要先在客户端中安装 kubectl。随后在集群中下载 kubectl 配置文件,并复制至客户端,在客户端中完成相关配置后即可访问对应的 CCE 集群。使用kubectl连接集群的具体步骤如下:
注意:
本操作指南给出的操作步骤都是基于linux操作环境的。
-
下载kubectl
您需要准备一台可访问公网的客户端计算机。从 Kubernetes 版本下载页面 下载对应的 kubectl 客户端,并通过命令行方式安装kubectl。如果已经安装kubectl,则跳过此步骤,您可执行kubectl version命令判断是否已安装kubectl。关于kubectl 的其他信息,可以参见 kubernetes 官方安装和设置 kubectl 文档。
a.登录到您的客户端计算机,下载kubectl。``` cd /home curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl ```
其中{v1.25.0}为指定的版本号,请根据集群版本进行替换。
b.安装kubectl。
``` chmod +x kubectl mv -f kubectl /usr/local/bin ```
- 下载集群凭证:
可在集群列表查看集群凭证,也可在集群详情页查看集群凭证
a. VPC访问凭证:在查看集群凭证弹窗,选择VPC访问凭证,单击下载长期访问凭证,或下载临时访问凭证,获取集群私网访问凭证。
b.公网访问凭证:在集群基本信息页签下的集群连接模块,查看 API Server 公网访问 是否已开启。
若未打开 API Server 公网访问,请选择开启。在查看集群凭证弹窗,选择公网访问凭证,单击下载长期访问凭证,或下载临时访问凭证下载集群公网访问凭证。
-
配置kubectl:将下载的集群凭证放在 kubectl 的默认配置路径。
a.登录到您的客户端计算机,复制步骤3中下载的访问凭证文件(以kubeconfig.yaml为例)到您客户端机器的/home目录下。
b.配置kubectl文件。cd /home mkdir -p $HOME/.kube mv -f kubeconfig.yaml $HOME/.kube/config
c.根据使用场景,切换kubectl的访问模式。
- VPC 内网接入访问请执行:
kubectl config use-context internal
- 互联网接入访问请执行(集群需绑定公网地址):
kubectl config use-context external
-
配置完成后,在客户端中执行以下命令,检查客户端能否通过kubectl连接集群。
kubectl cluster-info # 查看集群信息
若回显结果如下,则说明客户端能够通过kubectl连接集群。
Kubernetes control plane is running at https://xx.xx.xx.xx:5443 CoreDNS is running at https://xx.xx.xx.xx:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
通过kubectl创建简单的服务
创建一个nginx应用
这个命令假设kubectl命令行工具已经在PATH中,且有权限操作kubernetes集群(即已完成通过kubectl连接Kubernetes集群的操作)输入以下指令:
kubectl create deployment my-nginx --image=registry.baidubce.com/cce/nginx-alpine-go:latest --replicas=3 --port=80
上述命令会创建3个nginx容器,每个容器都会暴露它的80端口。
查看创建nginx容器状态的指令如下:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-858393261-pfjdn 1/1 Running 0 14s
my-nginx-858393261-sn7g5 1/1 Running 0 14s
my-nginx-858393261-spv8w 1/1 Running 0 14s
注意: 符号"$"代表输入的指令,其他行代表输入指令后显示的容器的信息。
暴露服务到internet
创建服务
在公有云环境下,可以通过输入命令,创建出一个类型为LoadBalancer的service,同时,还会联动公有云,创建一个负载均衡和一个公网IP,具体操作指令如下:
kubectl expose deployment my-nginx --port=80 --type=LoadBalancer
注意:
负载均衡:通过将同一区域的多台百度智能云服务器虚拟成一个组,设置一个内网或外网的服务地址,将前端并发访问转发给后台多台云服务器,实现应用程序的流量均衡。您可以通过查询服务获取的公网IP,在百度智能云控制台中的负载均衡BLB页面找到您创建的BLB实例,其收费标准请参考负载均衡BLB定价。 公网IP:作为一个独立的商品为用户提供公网带宽服务。您可以通过查看服务来查询您创建的公网IP地址,其收费标准请参考弹性公网IP EIP的定价,且自动默认计费标准为后付费。
查看服务
-
通过查看服务的命令,可以看到这个服务的情况和创建出的公网IP。
$ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 172.17.0.1 <none> 443/TCP 1h my-nginx 172.17.44.5 180.76.139.247 80:30356/TCP 47s
-
通过访问180.76.139.247这个链接可以看到创建的服务如图所示:
注意: 符号"$"代表输入的指令,其他行代表输入指令后显示的服务信息,其中180.76.139.247 为发布到外网的服务网址。 服务使用负载均衡除了上述指令调用之外,还可以通过Dashboard调用具体操作参考Kubernetes Dashboard创建服务
删除服务
如果需要删除服务,不想将对公网暴露。可以直接删除服务
kubectl delete svc my-nginx
注意:
kubernetes会将刚才创建出的公网IP和负载均衡删除,然后也会删除创建的这个服务。
本地访问 Kubernetes Dashboard (Web UI)
前提条件
在本地使用 Kubernetes Dashboard 前,用户需要先配置好kubectl,能通过kubectl连接百度智能云的 Kubernetes 集群。
操作步骤
-
创建Dashboard服务。在本地通过kubectl工具,可以在kubernetes集群里创建一个Dashboard应用。
$ kubectl create -f dashboard.yaml secret "kubernetes-dashboard-certs" created serviceaccount "kubernetes-dashboard" created clusterrolebinding "kubernetes-dashboard" created deployment "kubernetes-dashboard" created service "kubernetes-dashboard" created
对应的dashboard.yaml文件为:
apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-certs
namespace: kube-system
type: Opaque
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
---
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: kubernetes-dashboard
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
spec:
containers:
- name: kubernetes-dashboard
image: registry.baidubce.com/public/dashboard:v1.8.3-caas
ports:
- containerPort: 8443
protocol: TCP
args:
- --auto-generate-certificates
volumeMounts:
- name: kubernetes-dashboard-certs
mountPath: /certs
- mountPath: /tmp
name: tmp-volume
livenessProbe:
httpGet:
scheme: HTTPS
path: /
port: 8443
initialDelaySeconds: 30
timeoutSeconds: 30
volumes:
- name: kubernetes-dashboard-certs
secret:
secretName: kubernetes-dashboard-certs
- name: tmp-volume
emptyDir: {}
serviceAccountName: kubernetes-dashboard
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
-
在创建好dashboard之后,使用kubectl proxy命令开启一个代理,连接到Kubernetes API Server。
kubectl proxy
- 成功开启代理后,可以在本地浏览器中访问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创建服务
-
完成本地访问 Kubernetes Dashboard (Web UI)后,进入Dshboard页面,点击右上角创建,开始创建服务;
-
进入创建应用页面,输入要创建的应用名称,容器镜像,容器组(Pod)数量;
-
服务中选择外部, 后台会完成EIP和BLB的创建,端口配置分别填写80,80,协议选择TCP,然后点击部署按钮开始服务创建;
-
等待服务创建成功,且页面需要手动刷新;
-
在创建成功页面点击服务按钮,进入服务页面;
-
在此页面中会显示服务的外网地址;
-
在浏览器中输入外网地址,显示服务创建成功;
使用私有镜像创建服务
如果用户需要使用私有镜像,需要先配置ImagePullSecrets,同时在创建的资源中指明此ImagePullSecrets。下面简要介绍创建步骤,更加详细的关于ImagePullSecrets的信息,可以参考Kubernetes官方文档。
-
通过kubectl创建ImagePullSecrets
首先,用户需要有私有仓库空间的用户名密码,通过以下命令,可以创建出名为
myregistrykey
的ImagePullSecret$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL secret "myregistrykey" created.
-
在需要创建的资源中使用此ImagePullSecret
例如,下面的pod yaml文件里指明此Pod使用私有镜像
registry.baidubce.com/private-online/awesomeapp:v1
,同时通过myregistrykey
这个imagePullSecrets去镜像仓库拉取镜像。apiVersion: v1 kind: Pod metadata: name: foo namespace: awesomeapps spec: containers: - name: foo image: registry.baidubce.com/private-online/awesomeapp:v1 imagePullSecrets: - name: myregistrykey
-
在dashboard中指定创建服务的ImagePullSecrets
在通过kubectl创建成功ImagePullSecrets后,在dashboard中创建应用时,也能选择使用ImagePullSecret。 例如下图中:
我们为即将创建的应用选择了前文创建的`myregistrykey`,这样kubernetes就有权限区拉取私有仓库的镜像了。
windows 下使用kubectl
- 创建集群之后,下载windows版本的kubectl工具,例如64位的工具如下:
注意: 下载kubectl之前,用户需要先登录自己的服务器使用指令
kubectl version
查看自己创建的集群的版本号,然后选择对应的kubectl版本进行下载。例如:用户的集群版本号为1.8,则需要下载的kubectl为1.8版。下载链接为https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/README.md,用户根据自己集群版本号,下载相应版本的工具。
- 下载之后,将其解压到任意目录,例如放在D盘下
-
在 目录
C:\users\
下进入用户的文件夹,例如用户名为foo,则文件夹应该为C:\users\foo
,同时进入此目录,创建文件夹.kube
-
在集群列表页面,下载集群配置文件,放在上一步创建的
.kube
文件夹中,并且重名名为config
- 打开windows命令行提示符
-
进入kubectl文件存放的目录,运行
kubectl.exe get node
可以查看集群的节点。
-
在同一个目录下,创建dashboard.yaml文件,其内容是前文中的dashboard.yaml,例如可以用记事本创建:
-
然后输入
kubectl.exe create -f dashboard.yaml
创建dashboard
-
通过
kubectl.exe get pod --all-namespaces
命令可以查看是否创建成功
- 输入
kubectl.exe proxy
可以打开proxy,然后在浏览器中访问127.0.0.1:8001/ui
即可以访问dashboard