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