kubernetes 单 master 部署
(云主机、云服务器)kubernetes(go语言开发,简称:kube或K8s:K与S之间有8个字母)是一款开源的、免费的云计算技术软件、项目。虚拟化技术主要是将物理资源转变为逻辑上可以管理的资源,以打破物理资源结构之间的壁垒,让计算的元件运行在虚拟的计出上,而不是运行在物理资源上。K8s主要是用于批量管理物理主机节点(100+、1000+),将节点资源整合起来形成一个大的资源池,最终可以提供应用
K8s
一、 概念
-
虚拟化技术的概念
虚拟化技术主要是将物理资源转变为逻辑上可以管理的资源,以打破物理资源结构之间的壁垒,让计算的元件运行在虚拟的计出上,而不是运行在物理资源上。 -
云计算技术的概念
云计算技术主要是将硬件设备、操作系统、应用程序、带宽资源、计费系统等整理合起来姓成一个答的资源池,该资源池支持动态扩容、缩容。租户可以根据自身的需求按需购买、申请。(云主机、云服务器) -
kubernetes(go语言开发,简称:kube或K8s:K与S之间有8个字母)是一款开源的、免费的云计算技术软件、项目。(类似OpenStack)
K8s主要是用于批量管理物理主机节点(100+、1000+),将节点资源整合起来形成一个大的资源池,最终可以提供应用、容器(云主机)。
docker、普罗米修斯 也是基于go语言开发,ansible基于python开发。 -
kubernetes 云平台主要有两种类型的节点:master控制节点呵Node计算节点,
1) 在master控制节点上有如下三个组件服务- Apiserver
Apiserver 是整个K8s云平台最核心的组件服务(分布式、高可用),所有对K8s集群做的增、删、改、查等操作均要经过Apiserver接口允许、授权(鉴权)。还可以将居群的数据持久化写到etcd配置数据库(K-V)中。 - Scheduler
Scheduler 是调度服务,主要是负责K8S集群资源的调度、分配的。例如:创建一台云主机,Scheduler服务会根据自带的规则、算法从K8S Node计算节点中选择一台来创建该资源。(同时可以设置亲和性、污点标签) - Controller-manager
Controller-manager 也被称为控制管理器,是由replication controller(RC)副本、DaeminSet Deployment 资源控制器等组件组成,主要是实现资源管控,例如创建10台云主机(定义副本数10),控制管理器会检测集群最终运行的云主机数量必须是10台。
2) 在K8S Node计算节点上主要有如下亮哥哥核心组件服务:
- Kubelet
Kubelet 一般部署在K8s Node计算节点上,主要是用于接收Master控制节点发送过来的指令、信号(创建、删除、查看、管理一台云主机),Kubelet服务会调用本地的虚拟化技术软件(Docker、Containerd)去创建一台云主机资源 - Kube-proxy
KUbe-proxy 是代理服务、组件,主要是实现 K8S Master 和 Node 节点上的Pod(容器、云主机)实现网络转发(端口:NAT)、代理服务。可以借助 Linux 内核模块 netfilter、ip_vs去实现请求转发、代理。
- Apiserver
二、 ## 操作
环境准备(我用的是欧拉22),最低配置
Master 2C4G 40G:192.168.72.138
Node1 2C4G 40G:192.168.72.139
-
前期准备。所有服务器都需要操作
- 添加hosts解析、修改主机名、时间同步、关闭selinux、swap分区、docker、开启内核转发功能
关闭swap的原因是硬盘 I/O 读写很慢
#修改对应节点主机名; hostnamectl set-hostname `cat /etc/hosts|grep $(ifconfig|grep broadcast|awk '{print $2}')|awk '{print $2}'`;su ntpdate pool.ntp.org sed -i '/SELINUX/s/enforcing/diasbled/g' /etc/selinux/config && setenforce 0 swapoff -a echo 1 > /proc/sys/net/ipv4/ip_forward yum install docker #修改docker配置文件 mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com", "https://docker.m.daocloud.io"] } EOF #设置Docker开机启动; systemctl enable docker.service #启动Docker进程; systemctl start docker.service #查看Docker进程状态; ps -ef|grep -aiE docker
- 添加hosts解析、修改主机名、时间同步、关闭selinux、swap分区、docker、开启内核转发功能
-
在 K8S 的 master 和 node 节点上部署 Kubeadm、Kubelet、Kubectl(命令行主程序)三个软件工具,操作方法如下:
1)添加repo源。所有服务器执行cat>>/etc/yum.repos.d/kubernetes.repo<<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg EOF # 安装三个组件工具+服务 yum install -y kubeadm-1.20.4 kubelet-1.20.4 kubectl-1.20.4 #设置Kubelet服务开机启动; systemctl enable kubelet.service2)在 K8S master 控制节点上执行初始化
kubeadm init --control-plane-endpoint=192.168.72.138:6443 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.4 --service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 --upload-certs --v=5–control-plane-endpoint: Apiserver ip和端口,ip是master Ip
–image-repository :指定哪个仓库
–service-cidr: 服务的ip网段,vip、虚拟ip网段
–upload-certs:上传证书
–v=5:详细显示初始化过程
执行结束后,会有如下图内容,执行
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config -
在K8S 所有 Node 计算节点上执行加入 K8S 命令在初始化master时会有如下图内容,在 Node上执行
在这里插入图片描述kubeadm join 192.168.72.138:6443 --token ouvvt1.03zr8w582r6mndeq \ --discovery-token-ca-cert-hash sha256:eb0b63f772de47c87de66378e46ae54d2bef1f4551ebc8e7f519c1729e976cf4在 master 执行 kubectl get nodes 获取节点状态,发现有NotReady,这里是因为没有打通master和node之间pod容器的网络

-
打通 master 和 node 之间 pod 容器的网络(calico)
wget https://docs.projectcalico.org/archive/v3.10/manifests/calico.yaml kubectl apply -f calico.yaml执行
kubectl get pods -n kube-system,会全部变成running状态
变成
kubectl get node 也正常了
-
引入 K8S UI 界面,方便管理和维护(master操作)
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml修改文件

# 在 spec 后添加 type: NodePort # 在 targetPort 后添加 nodePort: 31001 # 应用文件 kubectl apply -f recommended.yaml # 查看dashboard状态 kubectl get pod -n kubernetes-dashboard kubectl get svc -n kubernetes-dashboard
在浏览器访问 https://192.168.72.138:31001/
在浏览器盲打thisisunsafe,出现如下图
创建管理员,获取token,复制到浏览器#创建Dashboard的管理用户; kubectl create serviceaccount dashboard-admin -n kube-system #将创建的dashboard用户绑定为管理用户; #获取刚刚创建的用户对应的Token名称; kubectl get secrets -n kube-system | grep dashboard #查看Token的详细信息; kubectl describe secrets -n kube-system $(kubectl get secrets -n kube-system | grep dashboard |awk '{print $1}')
-
查看集群是否正常
kubectl get pods -n kube-system全为为running则正常。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)