惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

云野开源志

OpenClaw npm 升级踩坑记:从版本冲突到模块丢失 免责声明 openclaw(moltbot、Clawdbot)常见异常 大模型配置-千问免费版 初始化OpenClaw 安装openclaw记录 大年初一桃花谷 CheckSSL.sh - SSL证书到期时间监控脚本 g.sh - Go语言环境管理工具安装脚本 install-cri-docker.sh - cri-dockerd安装脚本 install-docker.sh - Docker Engine快速安装脚本 install-docker2.sh - Docker 交互式安装脚本 install-nginx.sh - Nginx官方源快速安装脚本 install-zerotier.sh - ZeroTier 虚拟网络快速安装脚本 mng.sh - Nginx配置文件合并脚本 OpenSSL.sh - 自签名 SSL 证书生成脚本 SystemInfoMonitor.sh - 系统资源监控告警脚本 UpdateImages.sh - Docker 镜像批量更新脚本 为Hugo Next主题添加Umami统计支持 解忧杂货铺 - 栏目声明 Certd - 解决多平台SSL证书管理难题的神器 轻量级网络端口监控工具 GeoLite2 自动搬运仓库使用手册 MaxMind 免费账号注册 CloudFlare Accel Docker 搭建私有 DNS 服务器 hugo-theme-stack集成Umami openresty编译添加geoip2模块支持 GPU加速云原生应用,开启高性能计算新纪元 5. K8S Service与Ingress 4. K8S 控制器 Rancher搭建 3. K8S Pod 资源管理 2. K8S 基础资源管理 Rancher集成AzureAD认证 Harbor 部署搭建 站点留言板 关于 友情链接
1. K8S 简介和认证介绍
云野开源志 · 2023-07-21 · via 云野开源志

总结摘要

本文系统介绍了 Kubernetes 的起源、核心架构与基本概念,涵盖 Master/Node 节点组件功能、Pod/Controller/Service/Label/Namespace 等关键资源模型,并详细对比了 Minikube、Kind、kubeadm 及二进制等多种部署方式。同时提供基于 kubeadm 在 CentOS 7 上从零搭建高可用 Kubernetes 集群的完整操作指南,包括环境准备、内核参数调优、镜像加速、网络插件(Flannel)安装及节点加入流程。最后简要说明 CKA 认证考试要点,为初学者构建完整的 K8S 入门知识体系。

Kubernetes简介

Kubernetes 是 google 在2014年开源的一个容器集群管理系统,简称K8S。 K8S用于容器化应用程序的部署,扩展和管理。 K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。 Kubernetes目标是让部署容器化应用简单高效。

官网:https://kubernetes.io/zh/

Kubernetes管理员认证(CKA)

考试允许查阅官方文档

https://hubernetes.io

https://github.com

考试时长:三个小时

满分100分,66分及格。

费用300美元

有一次免费重考机会一年后过期

image-20211116215305911

Master

控制节点,对集群进行调度管理,接受集群外用户去集群操作请求。Master节点由API Server、Scheduler、ClusterState Store(ETCD数据库)和Controller Manger Server组成

Node

集群工作节点,运行用户业务

Nodes节点也叫做Worker Node,包含kubelet、kube proxy和(Container Runtime)

image-20211116220950103-16370718066542

Master节点Node节点
1、kube-apiserver
Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给 APIServer处理后再提交给Etcd存储。
2、kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而 ControllerManager就是负责管理这些控制器的。
3、kube-scheduler 根据调度算法为新创建的Pod选择一个Node节点,可以任意部 署,可以部署在同一个节点上,也可以部署在不同的节点上。
4、etcd 分布式键值存储系统。用于保存集群状态数据,比如Pod、Service 等对象信息。
1、kubelet
kubelet是Master在Node 节点上的Agent,管理本机 运行容器的生命周 期,比如创建容器、Pod挂 载数据卷、下载secret、获 取容器和节点状态 等工作。kubelet将每个 Pod转换成一组容器。
2、kube-proxy
在Node节点上实现Pod网 络代理,维护网络规则和四 层负载均衡工作。
3、docker或rocket
容器引擎,运行容器。

K8S搭建方式

1、 minikube

minikube可以再本地运行kubernetes的工具,minikube可以在个人计算机(包括Windows,macOS,LinuxPC)上运行一个单节点kubernetes集群,以便使用k8s或进行日常开发工作;

https://kubernetes.io/docs/tutorials/hello-minikube/

2、 kind

Kind和minikube类似的工具,在本地计算机上运行kubernetes,此工具需要安装并配置docker;

https://kind.sigs.k8s.io/

3、 kubeadm

kubeadm是一个k8s部署工具,提供kubeadm init和kubeadm join两个操作命令,可以快速部署一个k8s集群;

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

4、 二进制包

从GitHub下载发行版的二进制包,手动部署安装每个组件,组成kubernetes集群,步骤比较繁琐,但是能对各个组件有更清晰的认识。

5、 yum安装

通过yum安装kubernetes的每个组件,组成kubernetes集群,但是yum源里面的k8s版本比较老,所这种方式用的少。

6、 第三方工具

7、 花钱买

直接购买共有云平台k8s

Kubernetes基础概念

1、pod

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命名空间
  • Pod是短暂的

2、Controllers

  • ReplicaSet : 确保预期的Pod副本数量
  • Deployment : 无状态应用部署
  • StatefulSet : 有状态应用部署
  • DaemonSet : 确保所有Node运行同一个Pod
  • Job : 一次性任务
  • Cronjob : 定时任务

更高级层次对象,部署和管理Pod

3、Server

  • 防止Pod失联
  • 定义一组Pod的访问策略

4、Label:标签,附加到某个资源上,用于关联对象、查询和筛选

5、Namespace:命名空间,将对象逻辑上隔离

Kubeadm部署Kubernetes

kubernetes是官方社区推出的一个用于快速部署K8S集群的工具,这个工具可以通过两条指令完成一个kubernetes集群的部署。

1、创建一个Master节点

2、将node节点加入到Master集群中

1
$ kubeadm join <Master 节点的IP和端口>

Kubernetes部署环境准备

1、 一台或多台机器,操作系统CentOS 7.x-86_x64

2、 硬件配置:内存 >=2G,CPU >=2核

3、 集群内

4、 集群内各个机器可以访问外网,需要拉取镜像

5、 禁止swap分区

如果环境不满足要求会报错

一、环境说明

主机IP资源角色
node1.chang.com192.168.100.101>=2v >=2gmaster
node2.chang.com192.168.100.102>=2v >=2gworker
node3.chang.com192.168.100.103>=2v >=2gworker
node4.chang.com192.168.100.104>=2v >=2gworker
node5.chang.com192.168.100.105>=2v >=2gworker

二、时间同步,所有主机操作

1
2
[root@node1 ~]# yum install ntpdate -y
[root@node1 ~]# ntpdate time.windows.com

三、关闭防火墙、selinux、swap,所有主机操作

1
2
3
4
5
6
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

四、修改/etc/hosts文件,所有主机操作

1
2
3
4
5
192.168.100.101		node1.chang.com		node1
192.168.100.102		node2.chang.com		node2
192.168.100.103		node3.chang.com		node3
192.168.100.104		node4.chang.com		node4	
192.168.100.105		node5.chang.com		node5

五、配置内核参数,将桥接的IPv4流量传递到iptables,所有主机操作

1
2
3
4
5
6
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

六、生成yum源,所有主机操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
##将本地源备份,添加Centos源
yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel7.repo
##kubernetes源
cat <<EOF > /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
##docker 源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
/etc/yum.repos.d/docker-ce.repo
##重新构建yum缓存
yum clean all && yum makecache -y

七、安装docker,在所有主机操作

1
2
3
4
5
6
yum install docker-ce -y
systemctl start docker
systemctl enable docker
#查看版本
docker --version
Docker version 20.10.10, build b485636

八、安装kubelet:管理pod生命周期 kubeadm:部署K8S的工具 kubectl:管理K8S资源的工具,在所有主机操作

1
2
3
4
5
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
##安装时可以指定版本,如果不指定则安装最新版
##kubelet-1.19.0-0 kubeadm-1.19.0-0 kubectl-1.19.0-0
yum install kubectl-1.19.1 kubelet-1.19.1 kubeadm-1.19.1 -y

九、初始化K8S集群,只在master上操作

image-20211117191705316

镜像包的导入

因为默认的源下载会很慢,所以使用本地包导入的方式,避免因为下载镜像出现的问题。

image-20220104154913508

将这四个包上传至节点,使用docker load -i filename命令导入镜像。

在线获取镜像包:

image-20220121165723020

查看最新镜像的版本号:

然后使用下列脚本,执行下载镜像,注意要替换版本号即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
images=(
	kube-apiserver:v1.23.2
	kube-controller-manager:v1.23.2
	kube-scheduler:v1.23.2
	kube-proxy:v1.23.2
	pause:3.6
	etcd:3.5.1-0
	coredns:1.8.6
)

for imageName in ${images[@]};do
	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

下载完成之后使用``docker images`查看本地的镜像

初始化之前使用kubectl versionkubeadm version

image-20220121221144540

1
2
3
kubeadm init --kubernetes-version=1.22.3 --apiserver-advertise-address=192.168.100.101 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
##--kubernetes-version=版本号需要和kubeadm版本号一致
##Service-cidr的选取不能和podCIDR及本机网路有重叠或冲突,一般可以选择一个本机网络和PodCIDR都没有用到的私网地址段,比如PodCIDR使用10.244.0.0/16,那么service cidr可以选择10.96.0.0/12,网络无冲突即可;

!!!如果这里出现问题,先拍错,之后清除之前的配置,再次执行初始化命令

1
kubeadm reset		##清除之前执行一半的操作,

!!!当kuebelet的cgroup与docker 的cgroup不匹配时,可以修改docker的cgroup

1
2
3
4
5
6
vi /etc/docker/daemon.json
{
 "exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker
systemctl status kubelet.service

十、获取集群控制权限,只在master上操作

1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

十一、使用生成token令牌,将node节点加入到k8s中

在初始化完成K8S集群后Master节点会出现以下token令牌,在worker节点上执行即可加入集群

image-20211116222905567

1
2
3
kubeadm join 192.168.100.101:6443 --token j6je0l.0q2sv1whd63nrf65 --discovery-token-ca-cert-hash sha256:dd65c0d402337707d5a10497533505636d3e93dac52091cca83b32724b3a944f
##如果后期还想再加入更多的node节点,可以生成新的token令牌
#kubeadm token create --print-join-command

十二、添加网络插件,只在master上操作

1
2
3
4
5
6
7
8
9
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master.example.com NotReady control-plane,master 13m v1.22.3
k8s-node1.example.com NotReady <none> 3m31s v1.22.3
k8s-node2.example.com NotReady <none> 3m26s v1.22.3
k8s-node3.example.com NotReady <none> 3m24s v1.22.3
flannel插件配置清单:
https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

十三、验证最终结果

image-20211116223056045

1
2
kubectl get pod -n kube-system
kubectl get node