1.master的组件
1. kube-apiserver
- 作用:kube-apiserver是Kubernetes集群的核心组件,它提供了Kubernetes API的接口,是集群的前端服务器。所有的API请求都会通过kube-apiserver进行处理,包括创建、更新、删除资源对象等操作。此外,kube-apiserver还负责提供认证、授权、访问控制、API注册和发现等机制。
- 通信关系:上连其余组件,下接etcd,是集群内外进行资源操作的唯一入口
etcd:
保存了Kubernetes集群的所有状态数据,包括资源对象的状态、配置信息等
etcd也可以不部署在Master节点,单独搭建。
kube-controller-manager:
负责管理集群中所有的控制器kube-controller-manager包含多种控制器,如节点控制器、副本控制器、端点控制器等,它们分别负责不同的功能,如管理节点的健康状态、处理容器的副本等每个控制器都是一个单独的进程,但为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。
kube-scheduler:
负责将新创建的Pod调度到合适的节点上运行。它会根据Pod的资源需求和节点的容量情况来进行调度决策,保证集群的均衡负载。
cloud-controller-manager(可选):
用于管理与特定云平台相关的控制器。它的作用是将云平台的功能封装成Kubernetes的API,以便与其他组件进行交互。cloud-controller-manager包含多个与云平台交互的控制器,如节点控制器、路由控制器、服务控制器等
2.node的组件
kubelet
- 作用:kubelet是Node节点上的主要“节点代理”,它负责处理Master节点下发的任务,如管理Pod和Pod内的容器。kubelet会定期从API server获取节点上Pod的期望状态,并确保Pod中的容器按照期望状态运行。
kube-proxy
- 作用:kube-proxy是运行在Node节点上的网络代理,它实现了Kubernetes服务(Service)的一部分功能。kube-proxy负责维护主机上的网络规则并执行连接转发,以确保对Service的访问能够正确路由到后端Pod。
容器运行时(Container Runtime)
- 作用:容器运行时是Node节点上用于运行容器的组件,如Docker或Containerd。它负责容器的创建、启动、停止和删除等操作。
CNI插件(Container Network Interface)
- 作用:CNI插件为容器提供网络通信服务,确保容器之间以及容器与宿主机之间的网络互通。
3.实验步骤
1.配置三个主机名
hostnamectl set-hostname k8s-master
2.在三台主机绑定hosts文件
192.168.10.101 k8s-master
192.168.10.102 k8s-node1
192.168.10.103 k8s-node2
3.关闭交换分区里的swap defaults
vim /etc/fstab
4.配置kubernetes的yum源
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean all //清理
5.安装 kubelet,kubeadm,kubectl 所有节点都装
yum -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
- Kubelet:是Kubernetes集群中的一个关键组件,它运行在每个节点(Node)上,负责该节点上Pod的创建、更新、维护等全生命周期的管理。kubelet还负责拉取容器镜像、启动容器、管理容器的存储和网络资源等。
- Kubeadm:是一个用于快速部署和管理Kubernetes集群的工具。它简化了集群的部署过程,通过执行一系列预定义的步骤来初始化集群,并使其达到最小可用状态
- Kubectl是Kubernetes的命令行工具,用于与Kubernetes集群进行交互和管理。
kubelet负责节点和Pod的管理,kubeadm负责集群的部署和管理,而kubectl则提供了与集群进行交互和管理的命令行工具
6.设置开机启动 用start是无法启动的
systemctl enable kubelet
7.生成初始化配置文件
kubeadm config print init-defaults > init-config.yaml
8.修改初始化配置文件
advertiseAddress:192.168.10.101
name : k8s-master
imageRepository: registry.aliyuncs.com/google_containers //阿里源
podSubnet:10.244.0.0/16
9.拉取所需的镜像(这里我用的是离线镜像)
11.初始化 k8s-master 注意执行完以后有生成的令牌
kubeadm init --config=init-config.yaml
12.复制配置文件到用户的home 目录
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes
sudo cp -i /etc/kubernrtrs/admin.conf $HOME/.kube/config
13.将生成的令牌复制到其他两个节点
14.在master查看节点
kubectl get nodes
kubectl get pod -A
15.部署Calico网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
16.Metrics-server部署
下载Metrics-server的yaml文件并修改
- --kubelet-insecure-tls //添加
image: registry.cn-hangzhou.aliyuncs.com/google containers/metrics-server:vo.6.3
kubectl create -f components.yaml
17测试安装结果
kubectl top node
18:Dashboard部署
创建一个dashborad工作目录
mkdir /opt/k8s/dashboard
cd /opt/k8s/dashboard
19.上传yaml文件之后生成
kubectl create -f .
20.修改谷歌浏览器,在属性里修改
--test-type --ignore-certificate-errors //注意前面有空格
21.修改端口号
kubectl edit svc -n kubernetes-dashboard
22.查看端口号
kubectl get svc kubernetes-dashboard -n kubernetes-dashboard
22.查看token
admin-user | awk 'fprint $1}')
<ubectl -n kube-system describe secret $(kubectl -n kube-system get secret grep
6:登录dashboard