面向业务开发者的 k8s 基本命令

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

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

准备

预备知识

  • Docker,学习 k8s 以前了解 Docker 是毋庸置疑的。

工具

brew install kubectl
复制代码

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

Cluster

k8s 集群,通常生产环境有一个 Cluster 集群,测试环境有一个 Cluster 集群。web

Namespace

在一个 Cluster 会有不一样的 Namespace,能够区分不一样的业务团队。docker

Pod

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

Deployment

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

配置文件

关于 k8s 的配置文件位置在 ~/.kube/config。另外也可使用命令 kubectl config 查看以及更改配置,使用命令更改配置的同时,配置文件也会改变。bash

配置文件能够指定 ClusterNamespaceUser 的配置,并设置 Context。如下是一个简版的配置文件。服务器

# 该配置文件配置了一个用户 shanyue,一个集群 dev,而且设置了 dev 的 context
apiVersion: v1
clusters:
- cluster:
 certificate-authority: /Users/shanyue/.minikube/ca.crt
 server: https://192.168.99.100:8443
 name: dev
contexts:
- context:
 cluster: dev
 namespace: Business
 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 view
 # 查看集群列表
kubectl config get-clusters
 # 查看 Context 列表
kubectl config get-contexts
 # 设置当前 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 命令,根据配置文件更新资源。

配置文件中能够写多份配置,也能够写 DeploymentService 各类 Kind 配置。如下是以 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
复制代码

访问资源

如下 $app 表明特定 Pod 的 Name

# 获取当前 Context 下全部的 Deployment
kubectl get deployments
 # 获取当前 Context 下全部的 Pod
kubectl get pods
 # 获取当前 Cluster 下全部的 Pod
kubectl get pods --all-namespaces
 # 获取特定 Pod 的状态
kubectl describe pod $app
 # 进入某个 Pod 容器里边的命令行
kubectl exec -it $app bash
 # 查看某个 Pod 的日志
kubectl logs $app
复制代码
相关文章
相关标签/搜索