k8s之旅-1

2021-03-02 14:29:41 浏览数 (1)

三大主流的调度系统

  • Docker Swarm
    • Docker 公司的容器编排系统,使用的是标准的Docker API
    • 每个主机运行一个Docker Swarm代理,一个主机运行一个Docker Swarm管理者
    • 管理者负责指挥和调度主机上的容器
    • 使用的标准的Dokcer接口
  • kubernets
    • kubernets是自成体系的管理者工具,可以实现容器调度、资源管理、服务发现等
    • 容器集群管理系统,用于管理云平台上多个主机上容器的应用
    • 提供了应用部署、规划、更新、维护的一整套机制
    • 没有固定的容器格式,使用自己的API和命令行窗口CLI进行容器编排
    • 支持除了Docker的其他容器,比如:rkt
    • 使用自己的API,命令系统是另一套系统
  • Apache Mesos
    • 分布式系统内核的开源集群管理器
    • 出现早于上面两种方案,开源同时使用其他框架来支持容器化和非容器化的工作负载
    • 能够扩展到上千个节点,现代化可扩展型的数据处理应用都可以在Mesos上运行,包含Hadoop、Kafka、Spark

Mesos优缺点

十分钟带你理解Kubernetes核心概念

k8s简介

KubernetesGoogle开源的一个容器集群管理系统,用于管理云平台中多个主机上的容器化的应用。Kubernetes的目标是让部署容器化的应用简单并且高效(powerful,Kubernetes提供了应用部署,规划,更新,维护的一种机制。

  • Kubernetes是为生产环境而设计的容器调度管理系统
  • Kubernetes集群的组成部分
    • 分布式存储etcd:保存集群的状态
    • 服务节点Minion,etcd现在称为Node:运行应用容器的主机节点,在每个Minion节点上都会运行一个Kubelet代理,控制该节点上的容器、镜像和存储卷等。
    • 控制节点Master:运行节点的管理控制模块

k8s组件

  • Cluster : 集群是指由k8s使用一系列的物理机、虚拟机和其他基础资源来运行用户的应用程序
  • Node: 一个node就是一个运行着k8s物理机或虚拟机,并且pod可以在其上面被调度。
  • Pod : 一个pod对应一个由相关容器和卷组成的容器组
  • Label : 一个label是一个被附加到资源上的键/值对,譬如附加到一个Pod上,为它传递一个用户自定的并且可识别的属性。Label还可以被应用来组织和选择子网中的资源。
  • selector:是一个通过匹配labels来定义资源之间的关系表达式,例如为一个负载均衡的service指定所目标Pod
  • Replication Controller : replication controller 是为了保证一定数量被指定的Pod的复制品在任何时间都能正常工作,相当于是应用控制管理器。它不仅允许复制的系统易于扩展,还会处理当pod在机器在重启或发生故障的时候再次创建一个
    • 保证pod在任何时间正常运行
    • pod发生故障或者重启时候能够进行重建
  • Service : 一个service定义了访问pod的方式,就像单个固定的IP地址和与其相对应的DNS名之间的关系。
  • Volume一个volume是一个目录,可能会被容器作为未见系统的一部分来访问。Kubernetes volume 构建在Docker Volumes之上,并且支持添加和配置volume目录或者其他存储设备。
  • Secret : Secret 存储了敏感数据,例如能允许容器接收请求的权限令牌
  • Name : 用户为Kubernetes中资源定义的名字,即资源的名字。
  • Namespace : Namespace 好比一个资源名字的前缀。它帮助不同的项目、团队或是客户可以共享cluster,例如防止相互独立的团队间出现命名冲突。
  • Annotation : 相对于label来说可以容纳更大的键值对,为了存储不可识别的辅助数据,尤其是一些被工具或系统扩展用来操作的数据。

安装Docker

个人用户安装Docker,参考Docker官网,选择安装社区版CE

代码语言:javascript复制
//第一次在服务器上使用安装Docker,需要先安装仓库
sudo apt-get update

sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    gnupg-agent 
    software-properties-common
    
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository 
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
   $(lsb_release -cs) 
   stable"test    # test和nightly至少要填写一个在stable后面
 
// 安装Docker-CE版本
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

安装Minikube

MiniKube 是使用Go语言开发的,两种方式安装:

  • 通过下载基于不同平台早已编译好的二级制文件安装
  • 通过编译源文件安装
代码语言:javascript复制
# 下载v0.24.1版本
> curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.24.1/minikube-linux-amd64 && chmod  x minikube && sudo mv minikube /usr/local/bin/

# 下载最新版
> curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod  x minikube && sudo mv minikube /usr/local/bin/

> minikube -h

安装Kubectl

Kubectl简介

k8s通过kube-apiserver作为整个集群管理的入口。用户可以通过kubectl以命令行的方式同集群进行交互,它是K8s中非常常用的工具。

Kubernetes之kubectl命令行工具简介、安装配置及常用命令

kubectl命令记录

Kubernetes之kubectl常用命令

  • Apiserver是整个集群的主管理节点,用户通过Apiserver配置和组织集群,
  • 同时集群中各个节点同etcd存储的交互也是通过Apiserver进行交互。
  • Apiserver实现了一套RESTfull的接口,用户可以直接使用APIApiserver交互。
  • 官方提供了一个客户端kubectl随工具集打包,用于可直接通过kubectl以命令行的方式同集群交互。
安装命令
代码语言:javascript复制
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod  x kubectl && sudo mv kubectl /usr/local/bin/
Kubectl常用命令
代码语言:javascript复制
1.显示所有pod
kubectl get po   # 获取当前运行的所有pods的信息
kubectl get po -o wide  # 获取pod运行在哪个节点上的信息

2.显示所有rc
kubectl get rc

3.显示所有service
kubectl get service

4.删除rc
kubectl delete rc rcname

5.删除service
kubectl delete service servicename

6.删除pod
kubectl delete pod podname

7.查看pod描述
kubectl describe pod podname   # 可以查看错误

8.删除所有
kubectl delete pod –all

9.获取所有的namespacesvcnodes
kubectl get namespacesvcnodes   # 获取相关信息

kubectl get svc -all –all-namespaces
kubectl delete svc -all –all-namespaces
kubectl get limitrange –all-namespaces
kubectl delete limitrange inf-limit –namespace=inf

0 人点赞