更多详情,参考https://blog.youkuaiyun.com/hanghangaidoudou/article/details/86485308
1. 下载kubernetes
因为kubernentes是集群cluster,所以它要部署在不同的宿主机 时,因为有的宿主机的角色是master(不用干活,只负责分派任务给node角色的宿主机)和node
安装部署kubernentes集群参考 https://blog.youkuaiyun.com/daiqinge/article/details/103228753
2. kubernetes的主要组件
参考官网https://kubernetes.io/docs/concepts/overview/components/
(1)kubernetes的master角色的主机上
通过安装kubernetes的master安装包,安装了kube-apiserver、kube-scheduler、kube-controller-manager这三个管理组件。还默认安装了kubectl这个命令工具(kubectl这个工具还可以用client那个安装包来单独安装)。etcd: 是记录状态、集群配置信息等
(2)kubernetes的node角色的主机上,
主要是kube-proxy和kubelet
kube-proxy:监听kube-apiserver中服务和端口的变化情况,并创建路由规则进行服务负载均衡。
kubelet:用来接收kube-apiserver发来的请求,管理pod,kubelet启动时自动向kube-apiserver注册节点)
containertime:运行container的程序(docker、rkt、containered)
(3)其他组件或概念:
pod:kubernetes的最小操作单元,里面包括一个或多个容器。每个pod会有单独的ip,pod销毁,它的ip也会跟着销毁。每个pod里面有共享pause容器,其他业务容器共享这个容器的网络栈和volume。
flannel: node上安装flannel,是kubernetes的网络配置工具,集群的每个主机上都运行一个flanneld的代理程序。
kubeadm:是集群命令行工具,需要单独下载。
deployment控制器 和replication controller、replicaset控制器:管理pod。deployment包括replication controller的所有功能,还增加了查看升级详细进度和状态、升级暂停和启动、回滚、滚动更新等功能。replicaitonset和replication controller几乎没区别,能创建和销毁pod。如果有容器异常退出或者多余,这三者都可以重新创建pod或者收回保证集群高可用。所以deployment是最新且最优的选择。
daemonset控制器: 它创建的pod只在一个节点上,只能创建一个pod。而deployment可以创建多个pod,并把这些pod分布到多个节点上。
job控制器:以上的几个都是持久性控制器,比如跑的是web应用等。而job用于非持久性任务,比如归档文件等,pod跑完任务就结束运行。
service服务:运行前台服务的pod如何找到后台的pod,就用service,它是提供访问策略或微服务的
coreDNS: 使服务直接访问不用通过ip了,而是通过dns
yaml文件:配置文件yaml文件,可以用.yml 或者.yaml为文件后缀,是JSON文件的超集。yaml文件区分大小写,缩进表示层级关系,缩进不能用tab,只能用空格,缩进的空格个数不重要,只有同级别的对齐就行。yaml文件使用map和list两种数据结构,map的如下:
apiversion: v1
kind: pod
metadata:
name: ress-site
labels: xxx
而list的如下:
args
- sleep
- "1000"
- message
volume:kubernetes适配各种存储系统,包括本地存储EmptyDir和HostPath、网络存储NFS、GlusterFS以及PV/PVC。当volume被挂载到pod,这个pod里的所有container都可以访问这个volume。
(4)kubectl常见命令
kubectl create -f nginx.yaml 创建yaml文件
kubectl get nodes
kubectl get pods --all-namespaces
kubectl get namespaces
kubectl get componentstatus
kubectl scale deployment yaml文件 --replicas=5: 对pod的扩容
kbuectl apply -f yaml配置文件: 对pod的缩容
kubectl get pods -o wide 查看pod的个数等信息
kubectl get pods --all-namespaces -o wide 获取master宿主机上api server的ip
kubectl label node 192.168.1.122 mem=large 把此node贴标签为mem内存比较大,这样负载均衡分配pod任务的时候,有的pod需要大内存的,就优先选择这个node节点。
kubectl get pods --all-namespaces --show-labels -o wide 查看master上etcd pod的label
kubectl get deployments 查看node宿主机上的deployments
kubectl cluster-info 查看cluster在哪些机器ip和port上
kubectl config view 查看cluser配置信息
kubectl describe nodes
kubectl describe pods --all-namespaces 显示pods的所有详细信息
kubectl describe services --all-namespaces 给出cluster所有service 的详细信息
kubectl api-resources -o wide