Kubernetes概述
- 是一个开源的Docker容器编排技术
- 源自于google的borg
- 2015年7月kubernetesv1.0正式发布
- 调度计算集群节点,动态管理节点上的作业
- 使用[labels]和[pods]概念,将应用按逻辑单元分组
- 主要用途
- 自动化部署、扩展和管理容器应用
- 资源调度
- 部署管理
- 服务发现
- 扩容缩容
- 监控
- 使用Kubernetes的好处
- 裸容器的不足
- 宿主机宕机造成主机上的容器不可用无法自行恢复
- 容器的健康检查不到位,容器在运行,却无法访问
- 应用程序的部署、回滚、扩缩容困难
- 数千个容器和端口、难以维护
- 使用Kubernetes的好处
- 可以管理大量跨主机的容器
- 快速部署和扩展应用
- 无缝对接新的应用功能
- 节省资源、优化硬件资源的使用
- 裸容器的不足
- Kubernetes组件
- Master组件
- kube-apiserver
- Kubernetes API服务器,是集群的前端接口。它暴露RESTful API,供集群内外的客户端和组件调用,进行通信和交互。它负责处理集群内所有资源的请求和响应。
- Etcd
- 是一个高可用的键值存储系统,用于保存集群的所有配置和状态信息。etcd是分布式和持久的,任何对集群状态的修改都会被保存到etcd中。
- Kube-scheduler
- 调度器负责监视新创建的、未调度的Pods,并选择一个合适的节点来运行这些Pods。调度决策基于可用的资源、标签选择器、节点亲和性和反亲和性规则等。
- Kube-contioller-manager
- 控制器管理器运行多种控制器,这些控制器是集群中自动执行管理任务的后台进程。
- 节点控制器
- 复制控制器
- 端口复制权
- 服务账户和令牌控制器
- kube-apiserver
- Node组件
- kube-proxy
- 每个节点上的主要“节点代理”,负责维护该节点上的Pods和容器。kubelet与Master组件(如kube-apiserver)通信,并接收指令来管理Pods的生命周期。
- kubelet
- 实现了Kubernetes服务(Service)的网络层。它负责将到服务的流量路由到正确的后端Pod。kube-proxy维护了节点上的网络规则,确保流量能够正确地转发。
- Dockers Engine
- 尽管Docker Engine是Kubernetes早期常用的容器运行时,但现在Kubernetes支持多种容器运行时,如containerd、CRI-O等。容器运行时负责容器的创建、运行和管理,kubelet通过容器运行时接口(CRI)与容器运行时进行交互。
- 尽管Docker Engine是Kubernetes早期常用的容器运行时,但现在Kubernetes支持多种容器运行时,如containerd、CRI-O等。容器运行时负责容器的创建、运行和管理,kubelet通过容器运行时接口(CRI)与容器运行时进行交互。
- kube-proxy
- Master组件
Kubernetes群集部署
设置基本环境
#设置每个节点hosts文件
192.168.10.101 k8s-master
192.168.10.102 k8s-node01
192.168.10.103 k8s-hode02
#为每个节点设置名称
[root@localhost ~]# hostnamectl set-hostname k8s-master
[root@localhost ~]# bash[root@localhost ~]# hostnamectl set-hostname k8s-node01
[root@localhost ~]# bash[root@localhost ~]# hostnamectl set-hostname k8s-node02
[root@localhost ~]# bash
#关闭所有节点的selinux与防火墙 以下为每个节点都需做的操作
[root@k8s-master ~]# systemctl stop firewalld
[root@k8s-master ~]# systemctl disable firewalld
[root@k8s-master ~]# set -i '/^SELINUX=/s/enforcing/disabled' /etc/selinux/config
[root@k8s-master ~]# setenforce 0
#关闭交换分区
[root@k8s-master ~]# swapoff -a
[root@k8s-master ~]# vim /etc/fstab
/dev/mapper/centos-swap swap #注释掉该行
#配置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
[root@k8s-master ~]# yum clean all
#安装主要组件
[root@k8s-master ~]# yum -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
#kubelet设为开机启动
[root@k8s-master ~]# systemctl enable kubelet
Kubernetes集群的部署
#在k8s-master下操作 生成初始化配置文件
[root@k8s-master ~]# kubeadm config print init-defaults > init-config.yaml
#修改该文件
[root@k8s-master ~]# vim init-config.yaml
#找到以下内容并修改advertiseAddress: 192.168.10.101name: k8s-masterimageRepository: registry.aliyuncs.com/google_containerspodSubnet: 10.244.0.0/16
#拉取所需镜像
[root@k8s-master ~]# kubeadm config images pull --config=init-config.yaml
#初始化k8s-master
[root@k8s-master ~]# kubeadm init --config=init-config.yaml
#保存该token 加入集群时使用
kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:955846b741662fdbcfa01fa36323673c21af93e1e80edbae7abcf29e47ac0051
#复制配置文件到用户home目录
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
#将k8s-node01 k8s-node01 加入该集群
[root@k8s-node01 ~]#kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:955846b741662fdbcfa01fa36323673c21af93e1e80edbae7abcf29e47ac0051
[root@k8s-node02 ~]# kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:955846b741662fdbcfa01fa36323673c21af93e1e80edbae7abcf29e47ac0051
#查看发现节点为NotReady状态 需配置网络
[root@k8s-master ~]# kubectl get nodes
配置calico网络插件
#部署网络插件
[root@k8s-master ~]# kubectl apply -f https: //docs.projectcalico. org/manifests/calico. yaml
#再次查看 状态为Ready状态
[root@k8s-master ~]#
Metrics-server部署
Metrics Server 是一种可扩展、高效的容器资源指标来源,适用于Kubernetes 内置的自动 缩放管道。Metrics Server从Kubelets 收集资源指标,并通过Metrics API将它们暴露在 Kubernetes apiserver,供 Horizontal Pod Autoscaler和Vertical Pod Autoscaler 使用。指标API也可以通过访问kubectl top,从而更容易调试自动缩放管道。
#下载 Metrics-server
[root@k8s-master ~]# wget https: //github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components. yaml
#使用yaml文件安装
[root@k8s-master ~]# kubectl create -f components. yaml
#测试安装结果
[root@k8s-master ~]# kubectl top node
Dashboard部署
#核心文件下载地址
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard
#在k8s工作目录中创建dashborad工作目录
[root@k8s-master ~]# mkdir /opt/k8s/dashboard
[root@k8s-master ~]# cd /opt/k8s/dashboard
#上传所需的yaml文件并部署
[root@k8s-master ~]# kubectl create -f .
#查看端口号
[root@k8s-master ~]# kubectl get svc kubernetes-dashboard -n kubernetes-dashboard
#查看token
[root@k8s-master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get sectet | grep admin-user | awk '{print $1}')
#登录dashboard
https://192.168.10.101:31245/
安装helm客户端
#下载安装包
[root@k8s-master ~]# wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
#解压
[root@k8s-master ~]# tar zxvf htlm-v3.8.4-linux-amd64.tar.gz
#安装
[root@k8s-master ~]# mv linux-amd64/helm /usr/local/bin
#查看版本
[root@k8s-master ~]# helm version