Kubernetes 简介
一、Kubernetes 相关概念
1. Kubernetes 是一个开源的容器集群管理系统,主要用来自动化部署容器 、自动扩展与收缩容器规模 、提供容器间的负载均衡
2. Node:Node(节点)也就是宿主机,宿主机可以是物理机 、云主机 、虚拟机等等,我们可以在一个宿主机上跑多个容器(container)
3. Pod:我们可以在一个宿主机上跑多个容器,为了高可用和负载均衡,我们把多个容器组成一个Pod,同一个Pod里的容器共享同一个网络命名空间,可以使用 localhost 互相通信;
每个Pod里都有一个特殊的容器(Pause),这个容器提供网络栈和数据卷,其他普通容器共享这个容器的资源,因此同一个Pod内容器之间的通信和数据交换更为高效
4. Service:多个功能相同的Pod组成一个Service(微服务),Kubernetes 集群是由多个 Service 组成的,我们可以通过 ip:port 的形式来访问Service;
多个功能相同的Pod,我们要怎么区分呢?我们会给每个Pod打一个Label(标签),Service 通过 Label 来找到指定的Pod
5. Kubernetes Master:在一个Kubernetes集群里面,会有多个Node节点,而 Kubernetes Master 这个节点作为主节点,用来管理其他的Node节点,包括资源管理 、Pod调度 、弹性伸缩 、安全控制 、系统监控 、纠错等功能;
Kubernetes Master 上运行的 Replication Controller(RC)就是用来控制弹性伸缩的,通过控制Pod的数量来实现。
二、Kubernetes 实例
1. 这里通过一个小例子,更好地理解 Kubernetes 相关术语之间的关系
2. 首先创建一个 MySQL Service,然后创建一个 Web Service,最后用 Web Service 去连接 MySQL Service
3. 环境:一台 CentOS 7.5 机器(如果低于7.5需要 yum update 一下)、内存 3G 或以上
① 关闭 firewalld 和 selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
② 安装 etcd 和 kubernetes,etcd 是用来存储Kubernetes集群里的配置文件的
[root@localhost ~]# yum install -y etcd kubernetes
③ 修改配置文件
[root@localhost ~]# vim /etc/sysconfig/docker # 将 --selinux-enabled 改为 --selinux-enabled=false --insecure-registry gcr.io
[root@localhost ~]# vim /etc/kubernetes/apiserver # 将 --admission_control 参数中的 ServiceAccount 删除
④ 其他准备工作
[root@localhost ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
[root@localhost ~]# rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm |cpio -iv --to-stdout ./etc/rhsm/ca/redhatuep.pem > /etc/rhsm/ca/redhat-uep.pem
[root@localhost ~]# vim /etc/docker/daemon.json # 配置加速器
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
⑤ 按顺序启动所有服务
for s in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy
do
systemctl start $s
done
⑥ 创建一个 RC 文件,用来控制 MySQL 的 Pod 数量
[root@localhost ~]# vim mysql-rc.yaml
apiVersion: v1
kind: ReplicationController # RC(副本控制器)
metadata:
name: mysql # RC的名字
spec:
replicas: 1 # 控制Pod的数量为1
selector:
app: mysql
template:
metadata:
labels:
app: mysql # 定义Pod的标签,以便Service能够找到Pod
spec:
containers: # 定义Pod里的容器
- name: mysql
image: mysql:5.6
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: ""
[root@localhost ~]# kubectl create -f mysql-rc.yaml # 根据RC文件来创建一个RC
[root@localhost ~]# kubectl get rc # 查看是否创建了RC
NAME DESIRED CURRENT READY AGE
mysql 1 1 0 1m
[root@localhost ~]# kubectl get pod # 查看Pod数量,只有状态是Running的时候才是创建完了,否则的就是还在下载镜像的阶段
NAME READY STATUS RESTARTS AGE
mysql-dr556 0/1 Running 0 3m
⑥ 创建一个 MySQL Service
[root@localhost ~]# vim mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
[root@localhost ~]# kubectl create -f mysql-service.yaml # 创建 MySQL Service
[root@localhost ~]# kubectl get service # 查看是否创建了 MySQL Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 19m
mysql 10.254.211.198 <none> 3306/TCP 8s
[root@localhost ~]# mysql -uroot -p123456 -h10.254.211.198 # 创建完 MySQL Service,我们就可以使用 ip:port 的方式来访问了
Welcome to the MariaDB monitor. Commands end with ; or \g. # 如果没有mysql命令,可以通过 yum install -y mysql 来安装
Your MySQL connection id is 1
Server version: 5.6.42 MySQL Community Server (GPL) MySQL [(none)]>
⑦ 创建一个 RC 文件,用来控制 Web 的 Pod 数量,并制定去连接 MySQL Service
[root@localhost ~]# vim web-rc.yaml
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 1
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: '10.254.211.198' # 这里的IP需要通过 kubectl get service 查看 mysql 的 cluster ip
- name: MYSQL_SERVICE_PORT
value: ''
[root@localhost ~]# kubectl create -f web-rc.yaml # 根据RC文件来创建一个RC
[root@localhost ~]# kubectl get rc # 查看是否创建了RC
NAME DESIRED CURRENT READY AGE
mysql 1 1 1 19m
myweb 1 1 0 46s
[root@localhost ~]# kubectl get pod # 查看Pod数量,只有状态是Running的时候才是创建完了,否则的就是还在下载镜像的阶段
NAME READY STATUS RESTARTS AGE
mysql-dr556 1/1 Running 0 19m
myweb-5tlwc 0/1 Running 0 55s
⑦ 创建 Web Service
[root@localhost ~]# vim web-service.yaml
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
[root@localhost ~]# kubectl create -f web-service.yaml # 创建 Web Service
[root@localhost ~]# kubectl get service # 查看是否创建了 Web Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 35m
mysql 10.254.211.198 <none> 3306/TCP 16m
myweb 10.254.103.27 <nodes> 8080:30001/TCP 6s
⑧ 测试
[root@localhost ~]# iptables -P FORWARD ACCEPT
Kubernetes 简介的更多相关文章
- 【三小时学会Kubernetes!(二) 】Kubernetes 简介及Pod实践
Kubernetes 简介 我向你保证我没有夸大其词,读完本文你会问“为什么我们不称它为 Supernetes?” Kubernetes 是什么? 从容器启动微服务后,我们有一个问题,让我们通过如下问 ...
- 1、kubernetes简介
Kubernetes简介 文档信息 中文官网:https://kubernetes.io/zh 中文社区:https://www.kubernetes.org.cn/ Kubernetes是容器集群管 ...
- 001.Kubernetes简介
一 Kubernetes概述 Kubernetes是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker ...
- k8s学习笔记之一:kubernetes简介
一.虚拟化技术 1.什么是虚拟化技术 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...
- Kubernetes简介
Kubernetes is an open-source platform designed to automate deploying, scaling, and operating applica ...
- kubernetes 简介:kube-dns 和服务发现
服务发现 kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务,但是在使用的时候还有一个问题:怎么知道某个应用的 VIP?比如我们有两个应用,一个 app,一 ...
- 【Kubernetes学习之一】Kubernetes 简介
环境 centos 7 一.概念和组件Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理,简称k8s. 1.Master Kubernetes中的 ...
- K8S - 容器编排工具Kubernetes简介
1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...
- Kubernetes简介二
Kubernetes是什么?Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.通过Kubernetes你可以: 快速部署应用 快速扩展应用 ...
随机推荐
- JFinal的使用
JFinal 中的Controller Controller是JFinal核心类之一,该类作为MVC模式中的控制器.基于JFinal的Web应用的控制器需要继承该类.Controller是定义Acti ...
- R语言-连接MySQL数据库方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] R语言连接数据库常用的方法有2种: 1.使用R数据库接口 连接MySQL,使用RMySQL包,使用前RMySQL包要先安 ...
- Python __str__函数
class Cat: def __init__(self,_name): self.name = _name def __str__(self): return "i am %s" ...
- qualcomm lk gpio
关于高通平台lk中控制gpio的记录 http://blog.csdn.net/loongembedded/article/details/72834761 http://blog.csdn.net/ ...
- MySQL存储过程、触发器 小例子
一.存储过程 语法: CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...]) BEGIN ... END 参数: IN 输入参数 表示该参数的值必须在调用存 ...
- elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)
一.聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值.最小值,计算和.平均值等.ES作为 ...
- JDBC Like子句实例
在本教程将演示如何在JDBC应用程序中,从数据库表中查询数据记录, 在查询选择记录时使用Like子句添加其他条件. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式 ...
- js获取网页的url文件名( 例如index.aspx),js获取url的参数(例如获取 ?cid=joeylee的值),给jquery拓展方法
<script type="text/javascript"> var JsRequest={ //这就是一个静态类,类里面有2个静态方法 //方法一:获取url的 ...
- linux vi命令详解2
刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...
- TensorFlow-GPU:查看电脑显卡型号是否支持CUDN,以及相关软件下载与介绍
1.显卡(GPU)是否支持CUDN https://developer.nvidia.com/cuda-gpus 2.了解基础知识 1)CUDA(Compute Unified Device Arch ...