K8S极简教程(4小时快速学会)
1. K8S 概览
1.1 K8S 是什么
K8S官网文档:https://kubernetes.io/zh/docs/home/
1.2 K8S核心特性
服务发现与负载均衡
:无需修改你的应用程序即可使用陌生的服务发现机制。存储编排
:自动挂载所选存储系统,包括本地存储。Secret和配置管理
:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。批量执行
:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。水平扩缩
:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。自动化上线和回滚
:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。自动装箱
:根据资源需求和其他约束自动放置容器,同时避免影响可用性。自我修复
:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。
1.3 K8S 核心架构
我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图:
K8S 是属于Master-Worker架构
,即有 Master 节点负责核心的调度、管理和运维,Worker 节点则
执行用户的程序。但是在 K8S 中,主节点一般被称为Master Node
,而从节点则被称为Worker Node
或者 Node。
注意
:Master Node 和 Worker Node 是分别安装了 K8S 的 Master 和 Woker 组件的实体服务器,
每个 Node 都对应了一台实体服务器(虽然 Master Node 可以和其中一个 Worker Node 安装在同
一台服务器,但是建议 Master Node 单独部署),所有 Master Node 和 Worker Node 组成了
K8S 集群,同一个集群可能存在多个 Master Node 和 Worker Node
。
首先来看Master Node都有哪些组件:
kube-apiserver
。K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI 界面或者CLI命令行工具),然后,API Server 根据用户的具体请求,去通知其他组件干活。Schedule
r。K8S 所有 Worker Node 的调度器。当用户要部署服务时,Scheduler 会选择最合适的 Worker Node(服务器)来部署。Controller Manager
。K8S 所有 Worker Node 的监控器。Controller Manager 有很多具体的
Controller,Node Controller、Service Controller、Volume Controller等。Controller 负责监控和调整在 Worker Node上部署的服务的状态,比如用户要求 A 服务部署 2个副本,那么当其中一个服务挂了的时候,Controller 会马上调整,让 Scheduler 再选择一个 Worker Node 重新部署服务。etcd。K8S 的存储服务
。etcd 存储了K8S 的关键配置和用户配置
,K8S 中仅 API Server
才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。
接着来看Worker Node的组件:
Kubelet。Worker Node 的监视器,以及与 Master Node 的通讯器
。Kubelet 是 Master Node
安插在 Worker Node 上的“眼线”,它会定期向 Master Node 汇报自己 Node上运行的服务的状态,并接受来自Master Node 的指示采取调整措施。负责控制所有容器的启动停止,保证节点工作正常。Kube-Proxy
。K8S 的网络代理。Kube-Proxy 负责 Node 在 K8S 的网络通讯、以及对外部网络流量的负载均衡。Container Runtime。Worker Node 的运行环境
。即安装了容器化所需的软件环境确保容器化程序能够跑起来,比如 Docker Engine运行环境
2、K8S安装教程
视频地址:图灵K8S
2.1. 安装要求
- 3台以上机器,操作系统 CentOS7.7以上64位系统
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止swap分区
2.2. centos7兼容版本(7.7~7.9)
2.3. 三台主机
搭建k8s集群,三台主机,每台至少2G以上
主机 说明
主机 | 说明 |
---|---|
192.168.23.201 | k8s-master |
192.168.23.202 | k8s-node1 |
192.168.23.203 | k8s-node2 |
备注:本次装机选用k8s 1.19.16版本,dokcer1.18.09版本
主机安装参考链接,这里只参考第六集
黑马k8s第六集
2.4. 安装docker(三台主机都需要安装)
#卸载旧版本
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#配置docker的yum地址
sudo yum-config-manager
--add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装指定docker版本
sudo yum -y install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
#启动dokcer并开机自启
sudo systemctl start docker
sudo systemctl enable docker
#Docker配置修改
vim /etc/docker/daemon.json
{
"graph": "/data/docker",
"registry-mirrors": [
"https://xv8xjvpp.mirror.aliyuncs.com",
"https://docker.m.daocloud.io/",
"https://dockerproxy.com/",
"https://mirror.baidubce.com/",
"https://docker.nju.edu.cn/",
"https://ccr.ccs.tencentyun.com/"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
#加载配置文件并重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
常见错误
如果yum update失败,需要进行更换镜像,下面以清华镜像为例, 三台机器都要操作
- 打开配置yum所在文件,CentOS-Base.repo
vi /etc/yum.repos.d/CentOS-Base.repo
- 将CentOS-Base.repo里的内容全部替换为以下内容
# CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# 使用failovermethod指定优先级,这里设置为随机(roundrobin),也可以改为priority并指定每个URL的优先级
failovermethod=roundrobin
- 清理YUM缓存并更新,更新完之后再安装Docker
yum clean all
yum makecache
yum update
2.5. 主机环境配置(三台都需要)
#1.关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
#2.关闭selinux
#selinux禁用
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#2.关闭swap分区
swapoff -a
vim /etc/fstab # 注释到swap那一行 永久关闭
#3.设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
#4.添加host,IP需要改成你自己机器的IP
cat >> /etc/hosts << EOF
192.168.23.201 k8s-master
192.168.23.202 k8s-node1
192.168.23.203 k8s-node2
EOF
#5.允许iptables 检查桥接流量
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
#6.设置时间同步
yum install -y ntpdate
ntpdate time.windows.com
2.6. 安装kubelet,kubeadm,kubectl(三台机器都需要执行)
#1.配置k8s的yum源
cat <| sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#2.如果之前安装了k8s,先卸载旧版本
yum -y remove kubelet kubeadm kubectl
#3.查看可以安装的版本
#可以将 kubelet 替换为 kubeadm 或 kubectl,以查看相应组件的可用版本
yum list --showduplicates kubelet | sort -r
#4,安装指定的kubelet,kubeadm,kubectl版本
sudo yum install -y kubelet-1.19.16 kubeadm-1.19.16 kubectl-1.19.16
# 启动kubelet并卡机自启
sudo systemctl start kubelet
sudo systemctl enable kubelet
#检查k8s是否启动
sudo systemctl status kubelet
#排查错误
journalctl -xefu kubelet
#master主机上执行
# 下载镜像。
# 此镜像 kubernetes 的仓库中,由于网络原因,无法连接,下面提供了一种替换方案。
images=(
kube-apiserver:v1.19.16
kube-controller-manager:v1.19.16
kube-scheduler:v1.19.16
kube-proxy:v1.19.16
pause:3.2
etcd:3.4.13-0
coredns:1.7.0
)
for imageName in ${
images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.c