一步步学习k8s(一)

本文逐步介绍了Kubernetes(k8s)的学习过程,从Docker的局限性出发,阐述了k8s作为容器编排工具的重要性和优势。接着详细讲解了k8s的基本概念,包括Pod、Namespace、Label等,并介绍了k8s的网络架构。然后,文章详细描述了k8s的安装部署步骤,涵盖了从环境准备、证书签发到Master和Node节点服务的部署,包括etcd、apiserver、controller-manager、kube-scheduler的配置。最后,文章提及了验证k8s集群的方法,确保集群的正确运行。

一步步学习k8s

1、目前使用docker的情况

使用docker的缺点:
  1. 使用Docker容器化封装应用程序的缺点(坏处)
  2. 单机使用,无法有效集群
  3. 随着容器数量的上升,管理成本攀升
  4. 没有有效的容灾/自愈机制
  5. 没有预设编排模板,无法实现快速、大规模容器调度
  6. 没有统一的配置管理中心工具
  7. 没有容器生命周期的管理工具
  8. 没有图形化运维管理工具
使用Docker容器化封装应用程序的意义(好处)
  • Docker引擎统一了基础设施环境-docker环境
    • 硬件的配置
    • 操作系统的版本
    • 运行时环境的异构
  • Docker引擎统一了程序打包(装箱)方式-docker镜像
    • java程序
    • python程序
    • nodejs程序
  • Docker引擎统一了程序部署(运行)方式-docker容器
    • java -jar …→ docker run …
    • python manage.py runserver → docker run …
    • npm run dev → docker run …

2、因此我们需要一套容器编排工具

他就是: Kubernetes(K8S)
官网: https://kubernetes.io
GitHub: https://github.com/kubernetes/kubernetes
作用: 开源的容器编排框架工具(生态非常丰富)
意义: 解决Docker的
优势:

  • 自动装箱,水平扩展,自我修复
  • 服务发现和负载均衡
  • 自动发布(默认滚动发布模式)和回滚
  • 集中化配置管理和秘钥管理
  • 存储编排
  • 任务批处理运行

3、Kubernetes快速入门

3.1、四组基本概念
  • Pod/Pod控制器
  • Name/Namespace
  • Label/Label选择器
  • Service/Ingress

Pod:

  • Pod是K8S里能够被运行的最小的逻辑单元(原子单元)
  • 1个Pod里面可以运行多个容器,他们共享UTS+NET+IPC名称空间
  • 可以把Pod理解成豌豆荚,而同一个Pod内的每个容器是一颗颗豌豆
  • 一个Pod里运行多个容器,又叫 边车 (SideCar)模式

Pod控制器

  • Pod控制器是Pod启动的一种模板,用来保证在K8S里启动的Pod应始终按照人们的预期运行(副本数、生命周期、健康状态检查)
  • K8S内始终提供了众多的Pod控制器,常用的有以下几种
    • Deployment
    • DaemonSet
    • ReplicaSet
    • Statefulset
    • Job
    • Cronjob

Name

  • 由于K8S内部,使用“资源”来定义每一种逻辑概念(功能),因此每一种“资源”都应该有自己的“名称”
  • “资源”有api版本(apiVersion)类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息
  • “名称”通常定义在“资源”的“元数据”信息里

Namespace

  • 随着项目增多、人员增加、集群规模的扩大,需要一种能够隔离K8S内各种“资源”的方法,这就是名称空间
  • 名称空间可以理解为K8S内部的虚拟集群组
  • 不同名称空间内的“资源”,名称可以相同,相同名称空间内的同种“资源”,名称不能相同
  • 合理的使用K8S的名称空间,使得集群管理员能够更好的对交付到K8S里的服务进行分类管理和浏览
  • K8S里默认存在的名称空间有:default、Kube-system、Kube-public
  • 查询K8S里特定“资源”要带上相应的名称空间

Label

  • 标签是K8S特色的管理方式,便于分类管理资源对象
  • 一个标签可以对应多个资源,一个资源也可以有多个标签,他们是多对多的关系。
  • 一个资源拥有多个标签,可以实现不同维度的管理。
  • 标签的组成:Key = value
  • 与标签类似的,还有一种“注解”(annitations)

Label选择器

  • 给资源打上标签后,可以使用标签选择器过滤指定的标签
  • 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)
  • 许多资源支持内嵌标签选择器字段
    • matchLabels
    • matchExpressions

Service

  • 在K8S的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失
  • Service(服务)就是用来解决这个问题的核心概念
  • 一个Service可以看做一组提供相同服务的Pod的对外访问接口
  • Service作用于哪些Pod是通过标签选择器来定义的

Ingress

  • Ingress是K8S集群里工作在OSI网络参考模型下,第7层的应用,对外暴露的接口
  • Service只能进行L4 流量调度,表现形式是 ip + port
  • Ingress则可以调度不同业务域,不用URL访问路径的业务流量

4、 K8S的三条网络详解

核心组件

  • 配置存储中心 → etcd服务
  • 主控(master)节点
    • kube-apiserver服务
    • kube-controller-manager服务
    • kube-scheduler服务
  • 运算(node)节点
    • kube-kubelet服务
    • kube-porxy服务
  • CLI客户端
    • kubectl(命令行工具)

核心附件

  • CNI网络插件 → flannel/calico
  • 服务发现用插件 → coredns
  • 服务暴露用插件 → traefik
  • GUI管理插件 → Dashborad

简单介绍一下

  • apiserver
    • 提供了集群管理的RESTAPI接口(包括鉴权、数据校验及集群状态变更)
    • 负责其他模块之间的数据交互,承担通信枢纽功能
    • 是资源配额控制的入口
    • 提供玩呗的集群安全机制
  • controller-manage
    • 由一系列控制器组成,通过apiserver监控整个集群的状态,保证集群处于预期的工作状态
    • Node Controller
    • Deployment Controller
    • Service Controller
    • Volume Controller
    • Endpoint Controller
    • Garbage Controller
    • Namespace Controller
    • Job Controller
    • Resource quta Controller
  • scheduler
    • 主要功能是接收调度pod到合适的运算节点上
    • 预算策略(predict)
    • 优选策略(priorities)
  • kubelet
    • 简单地说,kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态
    • 定时汇报当前节点的状态给apiserver,以供调度的时候使用
    • 镜像和容器的清理工作,保证节点上的镜像不会沾满磁盘空间,退出的容器不会占用太多资源
  • porxy
    • 是k8s在每个节点上运行网络代理,service资源的载体
    • 建立了pod网络和集群网络的关系(clusterip → podip)
    • 常用三种流量调度模式
      • Userspace(废弃)
      • Iptables(濒临废弃)
      • Ipvs(推荐)
      • 负责建立和删除包括更新调度规则、通知apiserver自己的更新,或者从apiserver那里获取其他kube-proxy的调度规则变化来更新自己的

K8S架构图
在这里插入图片描述
课程主机,共5台,密码均为:think999!
在这里插入图片描述

5、安装部署

常见的安装方式:

5.1、环境检查
关闭防火墙
systemctl stop firewalld
systemctl disable firewall
禁用selinux
setenforce 0
sed -i 's@SELINUX=enforce@SELINUX=disabled@' /etc/selinux/config
5.2、调整操作系统
安装epel-release
yum -y install epel-release
装必要的工具
yum install -y wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils vim less
DNS服务初始化

10.4.7.11 机器上安装 bind9

yum -y install bind
主配置文件
[root@hdss7-11 ~]# vim /etc/named.conf

# 修改下面两行
listen-on port 53 { 10.4.7.11; };
allow-query     { any; };
# 加一行
forwarders      { 10.4.7.254; };
# 删除一行
listen-on-v6 port 53 { ::1; };

# 要确保
recursion yes;	#递归查询
# 为节省资源,可将下面两行改为 no
dnssec-enable no;
dnssec-validation no;

[root@hdss7-11 ~]# named-checkconf		#检查配置,没有输出信息即为正确
在10.4.7.11上配置区域文件

增加两个zone配置,od.com为业务域,host.com.zone为主机域

[root@hdss7-11 ~]# vim /etc/named.rfc1912.zones

# 添加至最后
zone "host.com" IN {
        type  master;
        file  "host.com.zone";
        allow-update { 10.4.7.11; };
};

zone "od.com" IN {
        type  master;
        file  "od.com.zone";
        allow-update { 10.4.7.11; };
};
在10.4.7.11上配置主机域文件
[root@hdss7-11 ~]# vim /var/named/host.com.zone

$ORIGIN host.com.
$TTL 600  ; 10 minutes # 过期时间十分钟 这里的分号是注释
@       IN SOA  dns.host.com. dnsadmin.host.com. (
        2021032923 ; serial
        10800      ; refresh (3 hours) # soa参数
        900        ; retry (15 minutes)
        604800     ; expire (1 week)
        86400      ; minimum (1 day)
        )
      NS   dns.host.com.
$TTL 60 ; 1 minute
dns                A    10.4.7.11
HDSS7-11           A    10.4.7.11
HDSS7-12           A    10.4.7.12
HDSS7-21           A    10.4.7.21
HDSS7-22           A    10.4.7.22
HDSS7-200          A    10.4.7.200
在10.4.7.11上配置业务域文件
[root@hdss7-11 ~]# vim /var/named/od.com.zone

$ORIGIN od.com.
$TTL 600  ; 10 minutes
@       IN SOA  dns.od.com. dnsadmin.od.com. (
        2021032901 ; serial
        10800      ; refresh (3 hours)
        900        ; retry (15 minutes)
        604800     ; expire (1 week)
        86400      ; minimum (1 day)
        )
        NS   dns.od.com.
$TTL 60 ; 1 minute
dns                A    10.4.7.11

[root@hdss7-11 ~]# named-checkconf		#检查配置,没有输出信息即为正确
启动服务
[root@hdss7-11 ~]# systemctl start named
[root@hdss7-11 ~]# dig -t A hdss7-21.host.com @10.4.7.11 +short		#验证解析是否正确
10.4.7.21
所有服务器修改dns地址
sed -i 's@nameserver 114.114.114.114@nameserver 10.4.7.11@' /etc/resolv.conf
5.3、准备签发证书环境

运维主机HDSS7-200.host.com上:

安装CFSSL

证书签发工具CFSLL:R1.2

[root@hdss7-200 ~]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
[root@hdss7-200 ~]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssl-json
[root@hdss7-200 ~]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo
[root@hdss7-200 ~]# chmod u+x /usr/local/bin/cfssl*
创建生成CA证书签名请求(csr)的JSON配置文件
[root@hdss7-200 ~]# vim /opt/certs/ca-csr.json
{
    "CN": "OldboyEdu",
    "hosts": [
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "beijing",
            "L": "beijing",
            "O": "od",
            "OU": "ops"
        }
    ],
    "ca": {
        "expiry": "175200h"
    }
}
CN: Common Name ,浏览器使用该字段验证网站是否合法, 一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法
C: Country,国家
ST:State,州,省
L: Locality ,地区,城市
O: Organization Name ,组织名称,公司名称
OU: Organization Unit Name ,组织单位名称,公司部门
生成CA证书和私钥
[root@hdss7-200 ~]# cfssl gencert -initca ca-csr.json | cfssl-json -bare ca
[root@hdss7-200 certs]# ll
total 16
-rw-r--r-- 1 root root  993 Apr  7 05:30 ca.csr
-rw-r--r-- 1 root root  328 Apr  7 05:29 ca-csr.json
-rw------- 1 root root 1679 Apr  7 05:30 ca-key.pem
-rw-r--r-- 1 root root 1346 Apr  7 05:30 ca.pem
5.4、docker环境准备

需要安装docker的机器:hdss7-21 hdss7-22 hdss7-200,以hdss7-21为例

[root@hdss7-200 ~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
[root@hdss7-200 ~]# mkdir /data/docker
[root@hdss7-200 ~]# mkdir /etc/docker/
[root@hdss7-200 ~]# vim /etc/docker/daemon.json
{
  "graph": "/data/docker",
  "storage-driver": "overlay2",
  "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"],
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "bip": "172.7.21.1/24",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "live-restore": true
}

可配置阿里云镜像加速

"registry-mirrors": ["https://srn2r5um.mirror.aliyuncs.com"],
部署docker镜像私有仓库harbor

HDSS7-200.host.com上
harbor安装
官方地址:https://goharbor.io/
下载地址:https://github.com/goharbor/harbor/releases
注意 不要选择1.7.5以下版本 有漏洞
下载的时候下载harbor-offline-installer-vx.x.x.tgz版本(离线安装版本)

安装harbor

HDSS7-200.host.com上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值