广州 网站开发 公司,温州注册网络公司价格多少,创意设计学院,那家做网站好一、K8S简介
Kubernetes中文官网#xff1a;Kubernetes
GitHub#xff1a;github.com/kubernetes/kubernetes
Kubernetes简称为K8s#xff0c;是用于自动部署、扩缩和管理容器化应用程序的开源系统#xff0c;起源于Google 集群管理工具Borg。
Kubernetes集群组件逻辑图…一、K8S简介
Kubernetes中文官网Kubernetes
GitHubgithub.com/kubernetes/kubernetes
Kubernetes简称为K8s是用于自动部署、扩缩和管理容器化应用程序的开源系统起源于Google 集群管理工具Borg。
Kubernetes集群组件逻辑图 k8s集群属于Master-Slave主从架构Master节点负责集群管理和资源调度用于运行控制平面组件(Control Plane Components)Slave节点就是工作负载节点一般称为Node节点也叫Worker节点主要负责运行Pod一个Pod里可以同时运行多个容器而容器一般封装的就是基于Dokcer打包的应用Pod英文叫豌豆荚每个容器就像是一颗豌豆简单来说Pod就是一组容器。
安装部署
二进制包 Github下载稳定版的二进制包手动部署每个组件组成k8s集群。
kubeadm工具 使用Kubeadm工具可以快速搭建一个k8s集群主要包括初始化控制平面节点和加入Worker节点提供的主要功能如下 kubeadm init初始化一个Master节点 kubeadm join将Worker节点加入集群 kubeadm upgrade升级K8s版本 kubeadm token管理 kubeadm join 使用的令牌 kubeadm reset清空 kubeadm init 或者 kubeadm join 对主机所做的任何更改 kubeadm version打印 kubeadm 版本 kubeadm alpha预览可用的新功能 二、准备工作
软硬件要求
Linux操作系统Ubuntu 或 CentOS每台节点至少2GMaster节点至少2C集群节点网络互通
环境配置
修改hosts配置
配置所有节点的IP和域名映射 # vim /etc/hosts 172.25.254.100 k8s_master 172.25.254.10 k8s_node1 172.25.254.20 k8s_node2 关闭Swap分区
kubelet要求必须禁用交换分区所以kubeadm初始化时回检测swap是否关闭如果没有关闭会报错如果不想关闭安装时kubelet命令需要添加--fail-swap-onfalse关闭Swap分区必须在所有节点上执行如下命令: # 临时关闭重启恢复 [rootk8s_node1 ~]# swapoff -a # 永久关闭注释swap行 [rootk8s_node1 ~]# cat /etc/fstab # /dev/mapper/centos-swap swap swap defaults 0 0 禁用SELinux
所有节点执行如下命令 [rootk8s_node1 ~]# sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/sysconfig/selinux 关闭防火墙
所有节点执行如下命令 [rootk8s_node1 ~]# systemctl disable firewalld [rootk8s_node1 ~]# systemctl stop firewalld 配置k8s的Yum源 [rootk8s_node1 ~]# cat /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck0 三、下载并安装docker [rootk8smaster yum.repos.d]# dnf install docker-ce -y 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。 上次元数据过期检查0:02:44 前执行于 2024年10月06日 星期日 16时57分04秒。 依赖关系解决。 软件包 架构 版本 仓库 大小 安装: docker-ce x86_64 3:27.3.1-1.el9 docker-ce 27 M 安装依赖关系: containerd.io x86_64 1.7.22-3.1.el9 docker-ce 43 M docker-ce-cli x86_64 1:27.3.1-1.el9 docker-ce 7.9 M 安装弱的依赖: docker-buildx-plugin x86_64 0.17.1-1.el9 docker-ce 14 M docker-ce-rootless-extras x86_64 27.3.1-1.el9 docker-ce 4.4 M docker-compose-plugin x86_64 2.29.7-1.el9 docker-ce 13 M 事务概要 安装 6 软件包 配置认证 [rootk8s_master ~]# mkdir -p /etc/docker/certs.d/reg.mqw.org/ [roothub harbor]# scp /data/certs/mqw.org.crt root172.25.254.100:/etc/docker/certs.d/reg.mqw.org/ca.crt root172.25.254.100s password: mqw.org.crt 100% 2114 1.5MB/s 00:00 指定docker默认的仓库 [rootk8s_master ~]# cd /etc/docker/ [rootk8s_master docker]# vim daemon.json { registry-mirrors: [https://reg.mqw.org] } [rootk8s_master docker]# systemctl enable --now docker 添加配置模块 #开机时能自动激活 [rootk8s_master ~]# echo br_netfilter /etc/modules-load.d/docker_mod.conf [rootk8s_master ~]# modprobe br_netfilter [rootk8s_master ~]# vim /etc/sysctl.d/docker.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 [rootk8s_master ~]# sysctl --system [rootk8s_master ~]# systemctl restart docker 四、配置k8s
配置软件仓库 #都配置 [rootk8s-master ~]# cd /etc/yum.repos.d/ [rootk8s-master yum.repos.d]# vim k8s.repo 安装三大组件-kubeadm、kubelet、kubectl
kubeadm用来初始化k8s集群的指令。kubelet在集群的每个节点上用来启动 Pod 和容器等。kubectl用来与k8s集群通信的命令行工具查看、创建、更新和删除各种资源 # 所有节点都安装 [rootk8s-node1 ~]# yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 # 所有节点设置开机启动 [rootk8s-node1 ~]# systemctl enable kubelet [rootk8s-master ~]# dnf install *.rpm -y [rootk8s-master ~]# vim /lib/systemd/system/cri-docker.service 启动 [rootk8s-master ~]# systemctl enable --now cri-docker.service [rootk8s-master ~]# systemctl enable --now kubelet.service 在master节点拉取k8s镜像
rootk8s-master ~]# kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.30.0 \ --cri-socketunix:///var/run/cri-dockerd.sock 上传镜像到harbor仓库 [rootk8s-master ~]# docker images | awk /google/{ print $1:$2} \ | awk -F / {system(docker tag $0 reg.timinglee.org/k8s/$3)} [rootk8s-master ~]# docker images | awk /k8s/{system(docker push $1:$2)} 上传到hub仓库 打上标签上传 [rootk8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.30.0 reg.mqw.org/k8s/kube-apiserver:v1.30.0 [rootk8s-master ~]# docker push reg.mqw.org/k8s/kube-apiserver:v1.30.0 [rootk8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.30.0 reg.mqw.org/k8s/kube-controller-manager:v1.30.0 [rootk8s-master ~]# docker push reg.mqw.org/k8s/kube-controller-manager:v1.30.0 [rootk8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.30.0 reg.mqw.org/k8s/kube-scheduler:v1.30.0 [rootk8s-master ~]# docker push reg.mqw.org/k8s/kube-scheduler:v1.30.0 [rootk8s-master ~]# docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.30.0 reg.mqw.org/k8s/kube-proxy:v1.30.0 [rootk8s-master ~]# docker push reg.mqw.org/k8s/kube-proxy:v1.30.0 [rootk8s-master ~]# docker tag registry.aliyuncs.com/google_containers/coredns:v1.11.3 reg.mqw.org/k8s/coredns:v1.11.3 [rootk8s-master ~]# docker push reg.mqw.org/k8s/coredns:v1.11.3 [rootk8s-master ~]# docker tag registry.aliyuncs.com/google_containers/pause:3.9 reg.mqw.org/k8s/pause:3.9 [rootk8s-master ~]# docker push reg.mqw.org/k8s/pause:3.9 [rootk8s-master ~]# docker tag registry.aliyuncs.com/google_containers/etcd:3.5.15-0 reg.mqw.org/k8s/etcd:3.5.15-0 [rootk8s-master ~]# docker push reg.mqw.org/k8s/etcd:3.5.15-0 集群
初始化 [rootk8smaster ~]# kubeadm init --pod-network-cidr10.244.0.0/16 \ --image-repository reg.mqw.org/k8s \ --kubernetes-version v1.30.0 \ --cri-socketunix:///var/run/cri-dockerd.sock #指定集群配置文件变量 [rootk8s-master ~]# echo export KUBECONFIG/etc/kubernetes/admin.conf ~/.bash_profile [rootk8s-master ~]# source ~/.bash_profile #设置kubectl命令补齐功能 [rootk8s-master ~]# echo source (kubectl completion bash) ~/.bashrc [rootk8s-master ~]# source ~/.bashrc 安装网络插件 [rootk8s-master ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml [rootk8s-master ~]# docker pull docker.io/flannel/flannel:v0.25.5 [rootk8s-master ~]# docekr docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1 [rootk8s-master ~]# docker tag flannel/flannel:v0.25.5 \ reg.timinglee.org/flannel/flannel:v0.25.5 [rootk8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 \ reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel [rootk8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5 [rootk8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1 #编辑kube-flannel.yml 修改镜像下载位置 [rootk8s-master ~]# vim kube-flannel.yml 146: image: reg.timinglee.org/flannel/flannel:v0.25.5 173: image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1 184: image: reg.timinglee.org/flannel/flannel:v0.25.5 #安装flannel网络插件 [rootk8s-master ~]# kubectl apply -f kube-flannel.yml 启用服务 [rootk8s-node1 ~]# systemctl start kubelet.serv #复制令牌 [rootk8s-node1 ~]# kubeadm join 172.25.254.100:6443 --token n3u7gu.zzumlnbhevtohv9f --discovery-token-ca-cert-hash sha256:0c08e6ff75578e3b1778cf72c7e81c91397c4ec6de21ac5abde16c71a6df34d3 --cri-socketunix:///var/run/cri-dockerd.sock 五、K8s命令
基础命令 1.显示集群版本 [rootk8s-master ~]# kubectl version 2.显示集群信息 [rootk8s-master ~]# kubectl cluster-info 3.给镜像打标签 [rootk8s-master ~]# docker tag busybox:latest reg.timinglee.org/mnwl/busybox:latest 4.上传本地镜像到镜像仓库 [rootk8s-master ~]# docker push reg.timinglee.org/mnwl/busybox:latest 5.创建一个名为webcluster的控制器pod数量为2 [rootk8s-master ~]# kubectl create deployment webcluster --image reg.timinglee.org/mnwl/nginx:laest --replicas 2 6.查看控制器 [rootk8s-master ~]# kubectl get deployments.apps 7.查看资源帮助 [rootk8s-master ~]# kubectl explain deployment 8.查看控制器参数帮助 [rootk8s-master ~]# kubectl explain deployment.spec 9.编辑控制器 [rootk8s-master ~]# kubectl edit deployment.apps webcluster 10.利用补丁更改控制器数量 [rootk8s-master ~]# kubectl patch deployments.apps webcluster -p {spec:{replicas:3}} 11.删除控制器资源 [rootk8s-master ~]# kubectl delete deployments.apps webcluster 运行和调试命令 1.运行pod [rootk8s-master ~]# kubectl run testpod --image reg.timinglee.org/mnwl/nginx:latest [rootk8s-master ~]# kubectl get pods 2.端口暴露 [rootk8s-master ~]# kubectl get services [rootk8s-master ~]# kubectl expose pod testpod --port 80 --target-port 80 3.查看资源详细信息 [rootk8s-master ~]# kubectl describe pods testpod 4.快速删除资源信息 [rootk8s-master ~]# kubectl delete pods/testpod --force 5.查看资源日志 [rootk8s-master ~]# kubectl logs pods/testpod 6.进行交互pod [rootk8s-master ~]# kubectl run -it testpod --image reg.timinglee.org/mnwl/busybox [rootk8s-master ~]# kubectl attach pods/testpod -it [rootk8s-master ~]# kubectl exec -it pods/testpod /bin/sh 7.本机和pod的文件交换 [rootk8s-master ~]# kubectl cp anaconda-ks.cfg testpod:/ 高级命令 1.利用命令生成yaml文件 [rootk8s-master ~]# kubectl create deployment --image reg.timinglee.org/mnwl/nginx webc luster --dry-runclient -o yaml webcluster.yml 2.利用yaml文件生成资源 [rootk8s-master ~]# kubectl apply -f webcluster.yml 3.管理资源标签 [rootk8s-master ~]# kubectl run nginx --image reg.timinglee.org/mnwl/nginx:latest [rootk8s-master ~]# kubectl get pods --show-labels 4.添加标签 [rootk8s-master ~]# kubectl label pods nginx appmnwl 5.更改标签 [rootk8s-master ~]# kubectl label pods nginx appcluster --overwrite 6.删除标签 [rootk8s-master ~]# kubectl label pods nginx app- 7.用控制器管理的pod,删除pod,会自动创建pod,除非删除控制器 [rootk8s-master network-scripts]# kubectl get pod NAME READY STATUS RESTARTS AGE testpod 1/1 Running 0 4h48m webcluster-7697fbcd88-jmmcp 1/1 Running 0 3h49m [rootk8s-master ~]# kubectl delete pod webcluster-7697fbcd88-jmmcp pod webcluster-7697fbcd88-jmmcp deleted [rootk8s-master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE testpod 1/1 Running 0 4h50m webcluster-7697fbcd88-9bk8t 1/1 Running 0 4s