【学习笔记】k8s
在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。
在k8s只要使用两条指令就可以创建一个集群,一个是kubectl init进行初始化,创建一个master节点,第二条指令就是kubectl join xxx创建一个node节点,加入这个集群。
创建集群之后,如何查看集群信息
k8s相关概念
k8s集群中有master和node两种角色,master负责管理node,node负责管理容器
1.pod(部署应用)
k8s是一个调度容器的工具,所有的容器可看成一个集群。集群有两种节点,一种是负责调度的master节点,一种是负责提供服务的node节点。master节点只能有一个,node节点有多个,并且要向master节点汇报工作。node节点里面可以运行容器,一个容器可以叫一个pod,功能相关的各个容器也可以看成是一个pod。集群调度的最小单元就是一个pod
思考:为什么要用pod?
相当于一个vm管理几个进程,在同一个pod的容器可以共享资源,IP地址,方便管理和调度
只要有一个pod,那么就可以产生无数个pod。。。。(扩容缩容)
2.service(发布应用)
service用来关联几个pod的,用来对外提供端口,对pod起到负载均衡的作用,就算pod地址发生改变也可以通过负载均衡重新找到pod的地址。pod和service之间通过lable来关联。
3.lable
键值对的形式来关联资源
4,pod控制器
来管理pod的生命周期,比如deployment,job
5.volume
独立于容器文件外的储存空间
6.namespace
命名空间,提供逻辑上的空间隔离,进行资源隔离
k8s的架构设计
k8s集群中有master和node两种角色,master负责管理node,node负责管理容器
master的组成
1.API server进程
为各类资源提供了增删改查的HTTP REST接口,提供认证授权机制。
访问API server进程有三种方式:
- 直接通过REST Request的方式来访问
- 通过命令行工具kubectl客户端来访问
- 编程的方式
2.etcd
数据库
3.调度器(scheduler)
是pod资源的调度器,监听未分配的pod资源,为其主动分配node
4.控制器管理器(controller manager)
node的组成
1.kubelet
2.kube-proxy
3.容器进行时(container runtime)
组件间的基本交互进程
k8s集群组件
核心组件
etcd
apiserver
controller manager
scheduler
kubelet
container runtime
kube-proxy
core DNS
k8s网络
确保
同一个pod内的通信
不同pod之间的通信
pod与service之间的通信
集群外部流量同service之间的通信
网络插件
pod基本操作
1.定义创建pod
创建一个Hello World Pod,运行一个输出“Hello World的容器”
- 定义hello-world-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
restartPolicy: OnFailure
containers:
- name: hello
image: "ubuntu"
command: ["/bin/echo","hello”,”world"]
- 字段解释
apiVersion: 声明K8s的API版本
kind: 声明API对象的类型,这里是Pod
metadata:设置Pod的元数据
name: hello-world 指定Pod的名称Pod名称必粗在Namespace内唯一
spec:配置Pod的具体规格
restartPolicy: 重启策略
containers:容器规格,数组形式,每一项定义一个容器
- name:指定容器的名称,在Pod的定义中唯一
image:设置容器镜像
command:设置容器的启动命令
- 创建
kubectl create -f hello-world-pod.yaml
2.查询Pod
kubectl get pod hello-world
#JSON格式显示Pod的完整信息
kubectl get pod hello-world --output yaml
#YAML方式显示Pod的完整信息
kubectl get pod hello-world --output json
状态和生命周期查询
kubectl describe pod hello-world
3.更新Pod
更新
kubectl replace -f hello-world-pod.yaml
重建Pod(由于Pod的很多属性没办法修改,比如容器镜像,这时候可以采用–force参数)
kubectl replace --force -f hello-world-pod.yaml
4.删除Pod
通过kubectl delete删除指定Pod
kubectl delete pod hello-world
通过kubectl delete批量删除全部Pod
kubectl delete pod --all
k8s集群的部署
部署方式
kubeadm
部署环境
准备工作
安装kubeadm
部署集群
初始化+加入节点