kubernetes intro

kubernetes

http://docs.kubernetes.org.cn/227.html

https://www.kubernetes.org.cn/k8s

https://mp.weixin.qq.com/s/zrpaBCa-gNuu99nHCeBLXQ

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

通过Kubernetes你可以:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用
  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可扩展: 模块化, 插件化, 可挂载, 可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

基础概念

http://docs.kubernetes.org.cn/92.html

对集群 Nodes Service Pod Deployment讲述的非常清楚,有图画形式,非常形象。

基本命令

http://docs.kubernetes.org.cn/683.html

https://www.cnblogs.com/klvchen/p/9585746.html

# 查看所有 pod 列表,  -n 后跟 namespace, 查看指定的命名空间
kubectl get pod
kubectl get pod -n kube  
kubectl get pod -o wide


# 查看 RC 和 service 列表, -o wide 查看详细信息
kubectl get rc,svc
kubectl get pod,svc -o wide  
kubectl get pod <pod-name> -o yaml


# 显示 Node 的详细信息
kubectl describe node 192.168.0.212


# 显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志
kubectl describe pod <pod-name>
eg:
kubectl describe pod redis-master-tqds9


# 根据 yaml 创建资源, apply 可以重复执行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml


# 基于 pod.yaml 定义的名称删除 pod 
kubectl delete -f pod.yaml 


# 删除所有包含某个 label 的pod 和 service
kubectl delete pod,svc -l name=<label-name>


# 删除所有 Pod
kubectl delete pod --all


# 查看 endpoint 列表
kubectl get endpoints


# 执行 pod 的 date 命令
kubectl exec <pod-name> -- date
kubectl exec <pod-name> -- bash
kubectl exec <pod-name> -- ping 10.24.51.9


# 通过bash获得 pod 中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -c <container-name> -- bash
eg:
kubectl exec -it redis-master-cln81 -- bash


# 查看容器的日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时查看日志
kubectl log  <pod-name>  -c <container_name> # 若 pod 只有一个容器,可以不加 -c 


# 查看注释
kubectl explain pod
kubectl explain pod.apiVersion

Service的形态

http://www.dockone.io/article/4884

 

Job作用

https://www.cnblogs.com/benjamin77/p/9903280.html

容器按照持续运行的时间可分为两类:

服务类容器

服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等。

工作类容器

工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。

Kubernetes 的 Deployment、ReplicaSet 和 DaemonSet 都用于管理服务类容器;对于工作类容器,我们用 Job。

https://www.jianshu.com/p/bd6cd1b4e076

Job对象通常用于运行那些仅需要执行一次的任务(例如数据库迁移,批处理脚本等等)。通过Job对象创建运行的Pod具有高可靠性,因为Job Controller会自动重启运行失败的Pod(例如Pod所在Node重启或宕机)。

Job的本质是确保一个或多个Pod健康地运行直至运行完毕。

在WIN10的WSL环境下使用Kubenetes

Running Kubernetes CLI on Windows Subsystem for Linux (WSL)

https://devkimchi.com/2018/06/05/running-kubernetes-on-wsl/

其中最主要的是配置的拷贝。

Copying Kubernetes Config from Windows

Even though kubectl has been installed, we can't use this until configuration is copied over. Enter the following command in the Bash prompt.

 cp /mnt/c/Users/[USERNAME]/.kube/config ~/.kube

If you have already completed this, you don't need /mnt bit any longer. Just use /c/Users/... instead.

And let kubectl know to use the Docker for Windows context.

kubectl in WSL should be working as expected. Enter the following command.
kubectl cluster-info

动动手

https://github.com/fanqingsong/code-snippet/blob/master/kubenetes/nginx-deployment.yaml

创建一个nginx服务,yml如下。

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: nginx-service
spec:
  ports:
    - port: 8080
      targetPort: 80
      nodePort: 30000
  selector:
    app: nginx
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

root@CN-00015440:~/win10/mine/kubenetes# kubectl apply -f nginx-deployment.yaml
service/nginx-service unchanged
deployment.apps/nginx-deployment unchanged
root@CN-00015440:~/win10/mine/kubenetes#

root@CN-00015440:~/win10/mine/kubenetes# kubectl get all
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-75675f5897-kglwz   1/1     Running   0          3h
pod/nginx-deployment-75675f5897-kgmnd   1/1     Running   0          3h
pod/nginx-deployment-75675f5897-pwv2g   1/1     Running   0          3h

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          9h
service/nginx-service   NodePort    10.100.109.145   <none>        8080:30000/TCP   3h

NAME                               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   3         3         3            3           3h

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-75675f5897   3         3         3       3h
root@CN-00015440:~/win10/mine/kubenetes#

root@CN-00015440:~/win10/mine/kubenetes# kubectl delete -f nginx-deployment.yaml
service "nginx-service" deleted
deployment.apps "nginx-deployment" deleted
root@CN-00015440:~/win10/mine/kubenetes#
root@CN-00015440:~/win10/mine/kubenetes#
root@CN-00015440:~/win10/mine/kubenetes# kubectl get all
NAME                                    READY   STATUS        RESTARTS   AGE
pod/nginx-deployment-75675f5897-pwv2g   0/1     Terminating   0          3h

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   9h
root@CN-00015440:~/win10/mine/kubenetes#
root@CN-00015440:~/win10/mine/kubenetes#
root@CN-00015440:~/win10/mine/kubenetes# kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   9h
root@CN-00015440:~/win10/mine/kubenetes#

其他推荐的教程

https://blog.csdn.net/wucong60/article/details/81699196

中文讲解的详细,适合起步。

https://github.com/rinormaloku/k8s-mastery

Learn Kubernetes in Under 3 Hours”,英文系列教程。

https://baijiahao.baidu.com/s?id=1602795888204860650&wfr=spider&for=pc

应该是上文的中文翻译。

configMap解决镜像配置变化问题

https://www.cnblogs.com/peitianwang/p/11498896.html

原文地址:https://www.cnblogs.com/lightsong/p/12596123.html