Kubernetes架构及安装
K8s架构
k8s内部是有几个组件的,分别是controller manager,api-server,scheduler,kubelet以及etcd,kube-proxy还有k8s客户端kubectl
controller manage
首先介绍的是controller manager,他是相当于大老板一样,整个集群他负责管理,协调其他的组件
api-server
api-server 是用来接受客户端的请求的,客户端就是kubectl,由kubectl发过来的请求会被api-server接受
scheduler
scheduler是一个调度器,当api-server收到客户端的创建pod请求之后,他会使用一系列算法得出这些pod应该在哪些节点上被创建出来,没有调度的话可能会出现2个节点,一个负载非常高,一个负载非常低
这样显然是不太合适的,scheduler就是用来防止这样的事情产生的
kubelet
kubelet 是用来控制pod的,当调度器调度完成之后,被分配的节点上的kubelet会按照要求操作pod,比如创建,删除,停止,kubelet每个节点上都有,因为他需要对pod进行管理
etcd
这是一个键值对数据库,很多集群都是用到这个了,比如OpenStack用的也是这个,他是用来存放一些键值对的数据的
kube-proxy
这个kube-proxy他就是用来管理内部的网络的,因为集群内部的网络是互通的,但是外部访问不到,我们通过这个组件创建SVC,外部网络就可以通过SVC来访问到这个pod了
kubectl
这个就是我们客户端工具,我们只需要通过这个工具就可以完成对集群的控制
k8s搭建
先配置hosts文件,将节点都维护进去
- 关闭防火墙,selinux,每个节点都需要做
# 在所有节点执行
[root@master ~]# systemctl disable --now firewalld
[root@master ~]# sed -i "s|^SELINUX=enforcing|SELINUX=disabled|g" /etc/selinux/config
- 关闭swap,每个节点都需要做
[root@master ~]# swapoff -a
[root@master ~]# vim /etc/fstab
# 注释掉swap
/dev/mapper/cs-root / xfs defaults 0 0
UUID=01ff8a7c-2b2b-4690-9500-c8816ccb2f4f /boot xfs defaults 0 0
# /dev/mapper/cs-swap none swap defaults 0 0
- 安装docker-ce,每个节点都需要做,安装docker是因为在安装docker的时候他会直接帮你把containerd一并安装好,当然,你也可以单独安装containerd
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
[root@master ~]# yum -y install docker-ce
[root@master ~]# systemctl enable --now docker
- 开启内核路由转发,每个节点都需要做
# 在sysctl.conf里面加入这3条
[root@master ~]# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@master ~]# sysctl -p
- 设置cgroup,每个节点都需要做
# 生成默认配置
[root@master ~]# containerd config default > /etc/containerd/config.toml
# 将cgroup打开
[root@master ~]# vim /etc/containerd/config/toml
# 找到这一行配置,将false改为true
SystemdCgroup = true
- 配置k8syum源,每个节点都需要做
[root@master ~]# 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
- 设置crictl运行端点,每个节点都需要做
cat <<EOF > /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 5
debug: false
EOF
- 安装kube工具,我安装的是1.26版本,每个节点都需要做
[root@master ~]# yum install kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0 -y
# 开机自启kubelet
[root@master ~]# systemctl enable --now kubelet
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.
- 集群初始化,只在master节点做
[root@master ~]# kubeadm init --kubernetes-version=v1.26.0 --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
省略部分信息,只看这里
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.200.200:6443 --token pmwfg5.4675xnktludacafe \
--discovery-token-ca-cert-hash sha256:28def19535f7856ccaab7552abf7831184e842ef743eb305ce563225fdea6b47
- 将节点加入集群,在node节点上执行
# 将上面给出的kubeadm join 命令直接复制执行
kubeadm join 192.168.200.200:6443 --token pmwfg5.4675xnktludacafe \
--discovery-token-ca-cert-hash sha256:28def19535f7856ccaab7552abf7831184e842ef743eb305ce563225fdea6b47
- 到master节点查看是否已经加入
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 3m24s v1.26.0
node1 NotReady <none> 7s v1.26.0
node2 NotReady <none> 0s v1.26.0
- 安装网络插件,calico
# 先将yaml文件下载
[root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
# 这个文件可以直接使用
[root@master ~]# kubectl delete -f tigera-operator.yaml
# 下载第二个文件
[root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml
# 这个文件需要修改
[root@master ~]# vim custom-resources.yaml
# 将里面的cidr: 改成你初始化集群的时候指定的网段
cidr: 10.244.0.0/16
[root@master ~]# kubectl create -f custom-resources.yaml
- 稍等一会之后再去查看集群状态,会变成Ready
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane 21m v1.26.0
node1 Ready <none> 17m v1.26.0
node2 Ready <none> 17m v1.26.0
Kubernetes架构及安装的更多相关文章
- Kubernetes 架构(下)- 每天5分钟玩转 Docker 容器技术(121)
上一节我们讨论了 Kubernetes 架构 Master 上运行的服务,本节讨论 Node 节点. Node 是 Pod 运行的地方,Kubernetes 支持 Docker.rkt 等容器 Run ...
- Kubernetes 架构(下)【转】
上一节我们讨论了 Kubernetes 架构 Master 上运行的服务,本节讨论 Node 节点. Node 是 Pod 运行的地方,Kubernetes 支持 Docker.rkt 等容器 Run ...
- kubernetes 1.9 安装部署
参考地址:https://github.com/gjmzj/kubeasz 引言 提供快速部署高可用k8s集群的工具,基于二进制方式部署和利用ansible-playbook实现自动化,既提供一键安装 ...
- kubernetes架构(2)
一.Kubernetes 架构: Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务. Master 节点 Master 是 Ku ...
- Kubernetes架构
一.Kubernetes 架构: Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务. 1. Master 节点 Master 是 ...
- 第2篇Kubernetes架构
一.Kubernetes 架构: Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务. Master 节点 Master 是 ...
- kubernetes架构及deployment应用(4)
Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务. 一.master节点 Master 是 Kubernetes Cluster ...
- k8s入坑之路(2)kubernetes架构详解
每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平 ...
- kubernetes之kubeadm 安装kubernetes 高可用集群
1. 架构信息 系统版本:CentOS 7.6 内核:3.10.0-957.el7.x86_64 Kubernetes: v1.14.1 Docker-ce: 18.09.5 推荐硬件配置:4核8G ...
- 【转载】k8s入坑之路(2)kubernetes架构详解
每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平台被 ...
随机推荐
- JAVA实现单链表修改和删除数据节点
JAVA实现单链表修改和删除数据节点 一.修改单链表中的一个节点 ①实现思路 因为带头节点的链表中头节点的next域不能发生改变(始终指向单链表的头节点),否则将找不到该链表.所以我们需要先找一个辅助 ...
- Flask框架——详解URL、HTTP请求、视图函数和视图类
文章目录 1 什么是url? 2 为什么要有url? 3 如何应用url? 3.1 url和路由的区别. 3.2 url传参的两种 3.2.1动态路由传参 3.2.1.1 动态路由的过滤 3.2.2 ...
- go语言 包依赖管理-构建完整的依赖项目:目录结构及包的调用
目录结构: <home>/ |-- greetings/ |-- hello/1.分别进入对应目录创建以上目录结构 //bash切换到用户主目录 cd $HOMEPAHT$ //bash新 ...
- 2023_10_10_MYSQL_DAY_02_课后题
2023_10_10_MYSQL_DAY_02_课后题 #06章1--7题 #1. 查询10号部门所有员工的员工姓名,员工工资,工资级别. SELECT e.ename 员工姓名,e.`sal` 员工 ...
- Go反射终极指南:从基础到高级全方位解析
在本文中,我们将全面深入地探讨Go语言的反射机制.从反射的基础概念.为什么需要反射,到如何在Go中实现反射,以及在高级编程场景如泛型编程和插件架构中的应用,本文为您提供一站式的学习指南. 关注[Tec ...
- 分享一个Redis自带的压测工具:redis-benchmark
前言 今天给xdm分享一个Redis自带的压测工具:redis-benchmark. 介绍 redis-benchmark 是一个用于测试 Redis性能的基准测试工具,可以帮助开发人员评估和比较 R ...
- Unity - UIWidgets 3. 页面跳转
Flutter的Route概念, 移动开发常指Page, 在android中指activity, ios中指viewcontroller, UGUI中常称为Panel\Form\View? 大概说的就 ...
- 二进制枚举&爆搜DFS
给定一个如下图所示的全圆量角器. 初始时,量角器上的指针指向刻度 0. 现在,请你对指针进行 n 次拨动操作,每次操作给定一个拨动角度 ai,由你将指针拨动 ai 度,每次的拨动方向(顺时针或逆时针) ...
- 一元多项式求和(c++源码)
LinkList.h #ifndef LINKLIST_H_ #define LINKLIST_H_ #include<stdio.h> template<class T> s ...
- C++基础杂记(3)
类的继承 基类与派生类之间的构造行为 在派生类中使用基类方法 protected 的访问权限 多态公有继承 关键字 virtual 示例 抽象基类(ABC) 私有继承和保护继承 多重继承 类的继承 基 ...