后端应用技术后端开发者

kubenetes 基本命令使用

2018-07-18  本文已影响11人  山月水风

随着容器技术的发展,k8s 也越来越火热。在网络上有许多关于 k8s 的文章,但大部分都是关于集群部署相关的,

而这篇文章主要讲作为应用开发者如何使用 k8s 。

准备

brew install kubectl

kubectl 是 k8s 的命令行工具,用于管理 k8s 集群。以上是 Mac 下的安装方法,其它操作系统参考官方文档。当然,你也可以使用 Dashboard 管理容器。

Cluster

k8s 集群,一般生产环境有一个 Cluster 集群,测试环境有一个 Cluster 集群。

Namespace

在一个 Cluster 会有不同的 Namespace,可以区分不同的业务团队。

Pod

Pod 是 k8s 中最小的可部署单元。一般一个 Pod 运行一个 Container,但是有时也会运行多个 Container。类似 docker-compose。

Deployment

Deployment 用来控制 Pod,比如控制一个应用起几个 Pod。

配置文件

关于 k8s 的配置文件位置在 ~/.kube/config,另外也可以使用 kubectl config view 查看配置。

配置文件可以指定 ClusterNamespaceUser 的配置,并设置 Context。以下是一个简版的配置文件。

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/shanyue/.minikube/ca.crt
    server: https://192.168.99.100:8443
  name: Dev
contexts:
- context:
    cluster: k8s-dev
    namespace: edu-dev
    user: shanyue
  name: dev
current-context: dev
kind: Config
preferences: {}
users:
- name: shanyue
  user:
    client-certificate: /Users/shanyue/.minikube/client.crt
    client-key: /Users/shanyue/.minikube/client.key

其中 current-context 代表当前上下文,也可以通过以下命名来设置。

kubectl config use-context dev

创建资源

kubectl create 代表根据文件创建一个资源,可以是 Deployment,也可以是 Pod。

kubectl run 代表根据镜像创建资源。

kubectl create -f app.yaml

kubectl run --image=k8s.gcr.io/echoserver:1.10 --port=8080

一般在 CI 中作 deploy 时会使用 kubectl apply 命令,代表根据配置文件进行创建或更新。

配置文件中可以写多份配置,也可以写 Deployment,Service 的各种配置。以下是以 node 作为服务器语言样例的配置。

apiVersion: v1
kind: Service
metadata:
  name: app
  namespace: dev
  labels:
    name: app
spec:
  ports:
  - port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    name: app

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app
  namespace: dev
  labels:
    name: app
spec:
  template:
    metadata:
      labels:
        name: app
    spec:
      containers:
      - name: app
        image: node
        imagePullPolicy: Always
        env:
        - name: PORT
          value: "8080"
        ports:
        - containerPort: 8080

访问资源

# 获取当前 Context 下所有的 Deployment
kubectl get deployments

kubectl get pods

# 获取当前 Cluster 下所有的 Deployment
kubectl get pods --all-namespaces

# 获取特定 Pod 的状态
kubectl describe $pod app

# 进入某个 Pod 容器里边的命令行
kubectl exec -it $app bash

# 查看某个 Pod 的日志
kubectl logs app
上一篇下一篇

猜你喜欢

热点阅读