kubernetes学习

什么是kubernets

Kubernetes,因为首尾字母中间有8个字符,所以被简写成K8s

K8s 是 Google 开源的容器集群管理系统。是底层资源与容器间的一个抽象层,在 Docker 技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。用于自动部署,扩展和管理容器化应用程序的开源系统。

特点

  • 可移植:支持公有云,私有云,混合云

  • 可扩展:模块化,热插拨,可组合

  • 自愈:自动替换,自动重启,自动复制,自动扩展

架构

image

这里主要分为两种节点,maternode

  • Master:主控节点,主要负责控制和维护整个集群的状态,比如创建资源、删除资源

  • Node:工作节点,主要负责运行任务,比如启动容器

基本概念

  • Pod:K8s 的基本运行单元
  • ReplicaSet:Pod 的集合
  • Deployment:提供更新支持
  • StatefulSets:提供有状态支持
  • Volume:数据卷
  • Labels:标签,资源间的关联一般通过这个来实现

Master相关组件

Master 提供集群的管理控制中心,通常情况下,Master 会独立部署,不在上面跑用户容器,以保证整个集群的稳定性和安全。当然可以跑多个 Master 来达到高可用

Kube-apiserver

用于暴露 Kubernetes API,任何的资源请求/调用操作都是通过 Kube-apiserver 提供的接口进行

Kube-controller-manager

运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行

Etcd

Etcd 是 Kubernetes 提供默认的存储系统,保存所有集群数据。所以一般推荐使用时要为 Etcd 数据提供备份计划

Node相关组件

节点负责从 Master 处接收任务并执行,适当地时候调整自己的状态或删除过期的负载

Kubelet

kubelet 是工作节点主要的程序,它会监视已分配给节点的 pod,具体功能包括:

  • 创建 Pod 所需的数据卷

  • 创建 Pod 所需的网络

  • 下载 Pod 的Secrets

  • 启动 Pod 中运行的容器

  • 定期执行容器健康检查

  • 上报节点状态

Kube-proxy

Kube-proxy 通过在主机上维护网络规则并执行连接转发来实现 Kubernetes 服务抽象

Docker/Rkt

Docker/Rkt 用于运行容器

kubeadm(快速安装工具)

kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践

  • kubeadm init启动一个 Kubernetes 主节点

  • kubeadm join启动一个 Kubernetes 工作节点并且将其加入到集群

  • kubeadm reset还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改

更多内容请参考官方文档kubeadm概述

kubectl(命令工具)

kubectl是用于针对Kubernetes集群运行命令的命令行接口

常用命令

k8s是用namespace区分不同项目的,所以大部分命令都需要带上-n namespace参数

  • Deployment操作

如果镜像有修改,那直接修改deploy的镜像

1
2
3
4
// 查看
kubectl get deploy -n [namespace]
// 编辑,一般就修改镜像,操作同vi
kubectl edit deploy [deploy-name] -n [namespace]
  • Pod操作

如果镜像名没变,那就删除pod,然后k8s会自动拉去最新的镜像重新运行pod

1
2
3
4
5
6
7
8
9
10
11
12
// 查看所有pod
kubectl get po --all-namespaces
// 查看某个空间的pod列表
kubectl get po -n [namespace]
// 查看pod的详情状态
kubectl describe po [pod-name] -n [namespace]
// 删除
kubectl delete po [pod-name] -n [namespace]
// 查看日志
kubectl logs [pod-name] -n [namespace] -f --tail=1000
// 进入容器
kubectl exec [pod-name] -n [namespace] -ti sh
  • Job操作

Job任务一般运行完一次后就没有用了,需要手动删除

1
2
// 删除所有job
kubectl delete job --all -n [namespace]
  • 连接远程kube

修改在.kube目录中config文件,配置:cluster、context、name

1
2
// 切换到配置的config
kubectl config use-context hand-uat@uat-asw
  • 复制文件到节点容器中
1
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar

更多内容请参考官方文档kubectl概述

helm(kubernetes应用的管理工具)

Helm是一种简化Kubernetes应用程序安装和管理的工具。可以把它想象为Kubernetes的 apt/yum/homebrew

Helm chart是用来封装kubernetes原生应用程序的yaml文件,可以在你部署应用的时候自定义应用程序的一些metadata,便与应用程序的分发

Helm有两部分:client(helm)和server(tiller)Tiller在您的Kubernetes集群内部运行,并管理chart的发布(安装)helm可以在任何地方

更多内容请参考官方Helm

参考文献