一、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 简介的更多相关文章

  1. 【三小时学会Kubernetes!(二) 】Kubernetes 简介及Pod实践

    Kubernetes 简介 我向你保证我没有夸大其词,读完本文你会问“为什么我们不称它为 Supernetes?” Kubernetes 是什么? 从容器启动微服务后,我们有一个问题,让我们通过如下问 ...

  2. 1、kubernetes简介

    Kubernetes简介 文档信息 中文官网:https://kubernetes.io/zh 中文社区:https://www.kubernetes.org.cn/ Kubernetes是容器集群管 ...

  3. 001.Kubernetes简介

    一 Kubernetes概述 Kubernetes是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker ...

  4. k8s学习笔记之一:kubernetes简介

    一.虚拟化技术 1.什么是虚拟化技术 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...

  5. Kubernetes简介

    Kubernetes is an open-source platform designed to automate deploying, scaling, and operating applica ...

  6. kubernetes 简介:kube-dns 和服务发现

    服务发现 kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务,但是在使用的时候还有一个问题:怎么知道某个应用的 VIP?比如我们有两个应用,一个 app,一 ...

  7. 【Kubernetes学习之一】Kubernetes 简介

    环境 centos 7 一.概念和组件Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理,简称k8s. 1.Master Kubernetes中的 ...

  8. K8S - 容器编排工具Kubernetes简介

    1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...

  9. Kubernetes简介二

    Kubernetes是什么?Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.通过Kubernetes你可以: 快速部署应用 快速扩展应用 ...

随机推荐

  1. Python 引用

    python引用python中的数值类型变量也是引用,例如: a = 100b=a那么a和b指向同一块内存但是当修改a或者b的值得时候,Python会新分配一块内存来存储新的值 python中不可变类 ...

  2. 《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷

    1基础理论部分 VGA(video graphics array)即视频图形阵列,是IBM在1987年随PS/2一起推出的使用模拟信号的一种视频传输标准.VGA相比与现在的视频传输接口来说已经过时,不 ...

  3. 关于Unity中的刚体和碰撞器的相关用法(二)

    在关于Unity中的刚体和碰撞器的相关用法(一)的基础上 有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机 ...

  4. Ilya Sutskever

    中文名:伊利亚 莎士科尔 早期: 加拿大多伦多大学,Hinton实验室,2005年至2012年 博士后: 斯坦福大学,Andrew实验室,2012年11月到2012年12月 工作: 谷歌,2013年3 ...

  5. linux mongodb数据库的安装

    折腾两天, 前领导留下的烂摊子,前天忽然挂掉了, 整个公司就我会linux, 奶奶的, 一言难尽. 下面记录下怎么安装mongodb, 前面是从菜鸟教程复制来的 1. 下载 MongoDB 提供了 l ...

  6. sqlldr 学习总结1

    1.建表语法(采用scott中的emp表) create table emp(  empno    number(4) not null,  ename    varchar2(10),  job   ...

  7. SpringMVC系列(十)<mvc:default-servlet-handler/>(处理静态资源)和<mvc:annotation-driven />

    一.<mvc:default-servlet-handler/>处理静态资源 若将 DispatcherServlet 请求映射配置为 /,则 Spring MVC 将捕获WEB 容器的所 ...

  8. e834. 设置JTabbedPane中卡片的位置

    The tabs of a tabbed pane can be placed on one of the four edges of its container. By default, when ...

  9. unity--------shader之standard 标准参数

    [Unity3D自学记录]Unity5 之 standard参数 标签: unity3d 2016-07-13 10:17 2428人阅读 评论(0) 收藏 举报  分类: Unity3D(70)   ...

  10. (原)hisi3531立体声pcm实现播放方式

    版权声明:本文为博主原创文章,未经博主允许不得转载(http://www.cnblogs.com/lihaiping/p/5251854.html) 最近在使用hisi3531做一个项目,需要实现本地 ...