注意: 本学习笔记内容来源于黑马k8s视频,
视频链接如下:

黑马k8s视频

记录的目的是在工作中应用到相关知识能够迅速检索.

第一章 Kubernetes介绍

1.1 部署方式的演进

物理机部署

虚拟机部署(每个虚拟机单独的操作系统,浪费系统资源)

容器部署(共享操作系统)

优点:每个容器有自己的文件系统,cpu,内存,进程空间等

运行应用程序所需的资源被容器包装,并和底层基础架构解耦

容器化的应用可以跨云服务上,跨linux操作系统进行部署

容器编排问题:

  1. 容器故障停机
  2. 并发访问增加,容器横向扩展.减少,缩容

容器编排工具:Swarm(Docker自己的容器编排工具),Mesos(Apache),Kubernetes(Google开源)

1.2 kubernetes简介

kubernetes是全新的基于容器技术的分布式架构方案
kubernetes的本质是一组服务集群.在集群中的每个节点运行特定的容器,对节点中的容器进行管理.功能如下:

  • 自我修复
  • 弹性伸缩
  • 负载均衡:服务启动多个容器,能够自动实现请求的负载均衡
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 版本回退:新版本有问题,可以回退到原来版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷

1.3 Kubernetes组件

Kubernetes由master节点和node节点组成,每个节点安装不同的组件

master: 集群的控制平面,负责集群的决策(管理)

  • ApiServer:资源操作的唯一入口,接受用户输入的命令,控制docker来创建更新销毁容器
  • Scheduler: 负责集群资源调度,按照调度策略将pod调度到node节点
  • ControllerManager: 负责维护集群状态,程序部署安排,故障检测,自动扩展,滚动更新
  • Etcd: 负责存储集群中各种资源对象的信息

node: 集群的数据平面,负责为集群提供运行环境

  • Kubelet: 负责维护容器的生命周期,通过控制docker,来创建,更新,销毁容器
  • KubeProxy: 负责提供集群内部的服务发现和负载均衡
  • Docker: 负责节点上容器的各种操作

在这里插入图片描述

1.4 Kubernetes概念

  • Master:集群控制节点,至少需要1个master节点来进行集群的管控
  • Node: 工作负载节点
  • Pod: Kubernetes的最小控制单元. 容器运行在pod中,一个pod可以有1个或者多个容器
  • Controller:控制器,通过它来实现对pod管理,启动pod,停止pod,伸缩pod数量等(控制器不止一种)
  • Service: pod对外服务的统一入口
  • Label:标签,用于对pod进行分类(狭义),同一类pod具有相同的标签
  • NameSpace:命名空间,用于隔离pod的运行环境

第二章 集群环境搭建

2.1 环境规划

2.1.1 集群类型

kubernetes: 一主多从和多主多从

  • 一主多从:
  • 多主多从: 多master多node节点,搭建负责,安全性高

在这里插入图片描述

安装方式:

  • minikube:快速搭建单节点kubernetes工具
  • kubeadm:用于快速搭建kubernetes集群的工具
  • 二进制包:下载组件二进制包,依次安装(学习推荐该方案)
  • 一条命令离线安装高可用k8s集群 https://github.com/fanux/sealos

2.2 环境搭建

2.2.1 主机安装(略)

安装配置虚拟机(使用kubeadm安装k8s集群要求CentOS版本在7.5或者7.5之上)

2.2.2 环境初始化

2.2.2.1 主机名解析

/etc/hosts文件
DNS解析(推荐)

2.2.2.2 时间同步

kubernetes要求集群中节点时间精确一致,可以使用chronyd服务从网络同步时间

systemctl start chronyd 
systemctl enable chronyd

推荐: 配置时间同步服务器

2.2.2.3 禁用selinux
/etc/selinux/config 
SELINUX=disabled
2.2.2.4 禁用swap分区
2.2.2.5 修改Linux的内核参数
2.2.2.6 配置ipvs功能

kubernetes service两种代理模型,一种基于iptables,一种基于ipvs

# 安装ipset和ipvsadmin
yum install -y ipset ipvsadm
# 将需要添加的模块写入脚本文件
2.2.2.7 配置系统时区
# 设置系统时区为 中国/上海
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

2.3 安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce

## 创建 /etc/docker 目录
mkdir /etc/docker

cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# 重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

2.4 安装Kubeadm

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubelet kubeadm kubectl && systemctl enable kubelet

第三章 资源管理

3.1 资源管理介绍

在Kubernetes,所有的内容都被抽象为资源,用户需要通过资源来管理kubernetes
在这里插入图片描述

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。
学习k8s的核心,就是学习如何对集群上的Pod,Pod控制器,Service,存储等各种资源进行操作

3.2 yaml语法学习

YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称"一种人性化的数据格式语言"。

YAML语法:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只能用空格(低版本限制)
  • 缩进空格数不重要,相同层级对齐
  • #表示注释
  • 冒号后面需要添加空格
  • 多段配置放在同一个yaml文件里,需要添加—

YAML支持数据类型:

  • 纯量: 单个的,不可再分的值(字符串、布尔值、整数、浮点数、Null、时间、日期)
  • 对象: 键值对的集合
# 形式一(推荐):
heima:
  age: 15
  address: Beijing
# 形式二(了解):
heima: {age: 15,address: Beijing}
  • 数组: 一组按次序排列的值,又称为序列
# 数组
# 形式一(推荐):
address:
  - 顺义
  - 昌平  
# 形式二(了解):
address: [顺义,昌平]

Json和yaml文件对比转换网站

3.3 资源管理方式

  • 命令式对象管理
    直接使用命令去操作kubernetes资源
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
  • 命令式对象配置
    通过命令配置和配置文件去操作kubernetes资源
kubectl create/patch -f nginx-pod.yaml 
  • 声明式对象配置
    通过apply命令和配置文件去操作kubernetes资源
kubectl apply -f nginx-pod.yaml 

3.3.1 命令式对象管理

kubectl命令
kubectl是kubenetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化的应用的安装部署.语法如下:

kubectl [command] [type] [name] [flags]

command: 指定要对资源进行的操作,例如create,get,delete
type: 指定资源类型,比如deployment,pod,service
name:指定资源的名称,大小写敏感
flags:指定额外的可选参数

# 查看所有Pod
kubectl get pod
# 查看某个pod
kubectl get pod {pod_name}
# 查看某个pod,以yaml格式展示结果
kubectl get pod {pod_name} -o yaml
# 查看k8s资源,信息
kubectl api-resources

k8s常用资源如下:

资源分类资源名称缩写
集群级别资源nodesno
命名空间namespacesns
pod资源podspo
pod资源控制器replicationcontrollersrc
replicasetsrs
deploymentsdeploy
daemonsetsds
jobs
cronjobscj
服务发现资源servicessvc
ingressing
存储资源volumeattachments
配置资源configmapscm
secrets

操作
kubernetes允许对资源进行多种操作

kubectl --help

常用操作:

命令作用
create创建
edit编辑
get获取
patch更新
delete删除
run运行
expose暴露
describe描述
logs查看日志
cp复制
applyrc
label标签
cluster-info集群信息
version版本

实例: 一个namespace/pod的创建和删除

# 创建一个namespace
kubectl create namespace dev
# 获取namespace
kubectl get ns
# 在此namespace下创建你并运行pod
kubectl run pod --image=nginx:latest -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
# 查看新创建的pod
kubectl get pod -n dev
# 删除指定的pod
kubectl delete pod pod-864f9875b9-pcw7x
# 删除指定的namespace
kubectl delete ns dev

3.3.2 命令式对象配置

命令式对象配置就是使用命令配合配置文件一起操作kubernetes资源

  1. 创建一个nginxpod.yaml,内容如下:
apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest
  1. 执行create命令,创建资源:
kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
  1. 执行get命令,查看资源:
[root@master ~]#  kubectl get -f nginxpod.yaml
NAME            STATUS   AGE
namespace/dev   Active   18s

NAME            READY   STATUS    RESTARTS   AGE
pod/nginxpod    1/1     Running   0          17s
  1. 执行delete命令,删除资源
[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted

3.3.3 声明式对象配置

声明式对象配置只有一个命令apply

# 执行一次,创建资源, 相当于kubectl create
kubectl apply -f nginxpod.yaml
# 再次执行一次,资源没有变动,有变动会更新资源.相当于kubectl patch
 kubectl apply -f nginxpod.yaml

扩展: kubectl是否可以在node节点上运行

# kubectl运行需要配置,配置文件时$HOME/.kube
[root@beebird-kubeflow-test-30 ~]# find / -name .kube
/root/.kube
需要将master的.kube文件复制到node节点上,才可以执行

推荐用法
创建/更新资源: 使用声明式对象配置

kubectl apply -f ***.yaml

删除资源: 使用命令式对象配置

kubectl delete -f ***.yaml

查询资源: 使用命令式对象管理

kubectl get(describe) 资源名称
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐