02.运行与管理

运行与管理

kubectl run 和 docker run 一样,它能将一个镜像运行起来,我们使用 kubectl run 来将一个 sonarqube 的镜像启动起来。

$ kubectl run sonarqube --image=sonarqube:5.6.5 --replicas=1 --port=9000

deployment "sonarqube" created

# 该命令为我们创建了一个 Deployment
$ kubectl get deployment
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
sonarqube   1         1         1            1           5m

我们也可以直接以交互方式运行某个镜像:

$ kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

K8s 将镜像运行在 Pod 中以方便实施卷和网络共享等管理,使用 get pods 可以清楚的看到生成了一个 Pod:

$ kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
sonarqube-1880671902-s3fdq   1/1       Running   0          6m

# 交互式运行 Pod 中的某个命令
$ kubectl exec -it sonarqube-1880671902-s3fdq -- /bin/bash

kubectl 可以用于删除创建好的 Deployment 与 Pod:

$ kubectl delete pods sonarqube-1880671902-s3fdq
$ kubectl delete deployment sonarqube

最后,我们以创建包含两个 Pod 的应用为例,展示简单的 Pod 创建、暴露等操作:

# 创建 Deployment
$ kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080

# 获取 Deployment 相关的信息
$ kubectl get deployments hello-world
$ kubectl describe deployments hello-world

# 获取关联的 ReplicaSet 对象
$ kubectl get replicasets
$ kubectl describe replicasets

# 创建 Service 对象,并且暴露服务
$ kubectl expose deployment hello-world --type=NodePort --name=example-service

# 获取服务信息
$ kubectl describe services example-service

# 获取关联的 Pod 信息
$ kubectl get pods --selector="run=load-balancer-example" --output=wide

# 访问服务
$ curl http://<public-node-ip>:<node-port>

网络访问

# 暴露某个 Pod 的端口
$ kubectl port-forward -n NAMESPACE $POD <local-port>:<pod-port> &
$ kubectl port-forward $POD_NAME 8080:80

# 暴露某个 Service 的端口
$ kubectl -n rook-ceph port-forward service/rook-ceph-mgr-dashboard 31631:7000 --address 0.0.0.0
$ kubectl port-forward -n default deployment/postgres 8432:5432

$ export WEBAPP_POD=$(kubectl get pods -n $NAMESPACE | grep web-app | awk '{print $1;}')
$ kubectl port-forward -n $NAMESPACE $WEBAPP_POD 8080

$ kubectl proxy --port 8002
# http://localhost:8002/api/v1/proxy/namespaces/NAMESPACE/services/SERVICE_NAME:SERVICE_PORT/

$ curl -v -u username:password \
  --cacert ./ca.pem \
  --cert ./crt.pem \
  --key ./key.pem \
  https://api.CLUSTER_ID.k8s.gigantic.io/api/v1/namespaces/logging/services/elasticsearch:es/proxy/_stats
上一页
下一页