k8s学习笔记(一)
注意: 本学习笔记内容来源于黑马k8s视频,视频链接如下:黑马k8s视频记录的目的是在工作中应用到相关知识能够迅速检索.文章目录第一章 Kubernetes介绍1.1 部署方式的演进1.2 kubernetes简介1.3 Kubernetes组件1.4 Kubernetes概念第二章 集群环境搭建2.1 环境规划2.1.1 集群类型安装方式:2.2 环境搭建2.2.1 主机安装(略)2.2.2 环
注意: 本学习笔记内容来源于黑马k8s视频,
视频链接如下:
记录的目的是在工作中应用到相关知识能够迅速检索.
第一章 Kubernetes介绍
1.1 部署方式的演进
物理机部署
虚拟机部署(每个虚拟机单独的操作系统,浪费系统资源)
容器部署(共享操作系统)
优点:每个容器有自己的文件系统,cpu,内存,进程空间等
运行应用程序所需的资源被容器包装,并和底层基础架构解耦
容器化的应用可以跨云服务上,跨linux操作系统进行部署
容器编排问题:
- 容器故障停机
- 并发访问增加,容器横向扩展.减少,缩容
容器编排工具: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: [顺义,昌平]
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常用资源如下:
资源分类 | 资源名称 | 缩写 |
---|---|---|
集群级别资源 | nodes | no |
命名空间 | namespaces | ns |
pod资源 | pods | po |
pod资源控制器 | replicationcontrollers | rc |
replicasets | rs | |
deployments | deploy | |
daemonsets | ds | |
jobs | ||
cronjobs | cj | |
服务发现资源 | services | svc |
ingress | ing | |
存储资源 | volumeattachments | |
配置资源 | configmaps | cm |
secrets |
操作
kubernetes允许对资源进行多种操作
kubectl --help
常用操作:
命令 | 作用 |
---|---|
create | 创建 |
edit | 编辑 |
get | 获取 |
patch | 更新 |
delete | 删除 |
run | 运行 |
expose | 暴露 |
describe | 描述 |
logs | 查看日志 |
cp | 复制 |
apply | rc |
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资源
- 创建一个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
- 执行create命令,创建资源:
kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
- 执行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
- 执行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) 资源名称
更多推荐
所有评论(0)