• K8s中ctr和crictl区别K8s中ctr和crictl区别
  • VMware Workstation(Win+Linux)虚拟机合集+激活密钥VMware Workstation(Win+Linux)虚拟机合集+激活密钥

今日发布0 篇文章 | 本站共发布了40篇文章
  • k8s 中的三种容器探测方法

    k8s 中的三种容器探测方法:启动探测、存活探测、就绪探测 1、启动探测 startupProbe:探测容器中的应用是否已经启动。如果提供了启动探测(startup probe),则禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功Success。 2、存活探测 livenessprobe:用指定的方式(exec、tcp、http)检测pod中的容器是否正常运行,如果检测失败,则认为容器不健康,那么Kubelet将根据Pod中设置的 restartPolicy策略来判断Pod 是否要进行重启操作,如果容器配置中没有配置 livenessProbe,Kubelet 将认为存活探针探测一直为success(成功)状态。 3、就绪探测 readnessprobe:就绪性探针,用于检测容器中的应用是否可以接受请求,当探测成功后才使Pod对外提供网络访问,将容器标记为就绪状态,可以加到pod前端负载,如果探测失败,则将容器标记为未就绪状态,会把pod从前端负载移除。 我们可以自定义在pod启动时是否执行这些检测,如果不设置,则检测结果均默认为通过,如果设置,则顺序为startupProbe>readinessProbe和livenessProbe,其中readinessProbe和livenessProbe是并发关系, 官方文档是是这样描述的: Caution: Liveness probes do not wait for readiness probes to succeed. If you want to wait before executing a liveness probe you should use initialDelaySeconds or a startupProbe 以上三种探测方法都支持下面三种探针: 1、exec:在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。 2、TCPSocket:通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。 3、HTTPGet:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康 通常探针探测结果有以下值: 1、Success:表示通过检测。 2、Failure:表示未通过检测。 3、Unknown:表示检测没有正常进行。 Pod探针相关的属性: 探针(Probe)有许多可选字段,可以用来更加精确的控制Liveness和Readiness两种探针的行为 initialDelaySeconds:容器启动后要等待多少秒后探针开始工作,单位“秒”,默认是 0 秒,最小值是 0 periodSeconds: 执行探测的时间间隔(单位是秒),默认为 10s,单位“秒”,最小值是1 timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为1,单位“秒”。 successThreshold:连续探测几次成功,才认为探测成功,默认为 1,在 Liveness 探针中必须为1,最小值为1。 failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3,最小值为 1 两种探针区别: ReadinessProbe 和 livenessProbe 可以使用相同探测方式,只是对 Pod 的处置方式不同: readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。 livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。...

    2023-10-28 技术 231
  • 一些与Pod相关的kubectl命令

    kubectl是Kubernetes的命令行工具,主要使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的管理命令。 以下是一些与Pod相关的常用命令: 1、创建Pod: kubectl create 用于创建pod,如要创建名为pod-test的Pod,可以使用以下命令 kubectl create pod pod-test --image=tomcat #将为以tomcat镜像创建一个名为pod-test的Pod 2、获取Pod信息: kubectl get pods 3、查看Pod日志信息:kubectl logs Pod名 4、进入Pod: kubectl exec -it Pod名 -- /bin/bash 5、删除Pod: 1)利用Pod名直接删除: kubectl delete pod Pod名 2) 利用Pod配置yaml文件删除: kubectl delete -f Pod-yaml文件名.yaml 3) 强制删除某个Pod: kubectl delete pod xxx --force --grace-period=0 4)删除所有pods: kubectl delete pods --all 6、查看分析Pod: kubectl describe pod Pod名 kubectl describe pod pod-name 7、更新Pod: kubectl apply -f podname.yaml 此命令也可以用于指定Pod配置yaml文件创建Pod 8、暂停和恢复Pod 暂停Pod:kubectl pause pod pod名 恢复Pod:kubectl unpause pod pod名 9、手动扩容和缩减pod: kubectl scale 如想要将Pod的副本扩大到6个,以下尝试以下命令 kubectl scale --replicas=6 deployment/pod名 10、导入导出Pod: 导出Pod: kubectl export pod Pod名 --output=Pod名.yaml 11、查看Pod的CPU和内存资源使用(需要安装metric-server组件) kubectl top pods...

    2023-10-28 技术 159
  • OpenStack和Kubernetes(k8s)的区别理解

    OpenStack和Kubernetes(k8s)都是开源的云计算平台,但它们的设计和目的略有不同。 OpenStack是一个云基础设施平台,旨在提供计算、存储和网络资源的管理,以构建和管理私有、公有和混合云。OpenStack提供了一系列的服务,如Nova(计算服务)、Cinder(块存储服务)、Neutron(网络服务)等,可以用于构建和管理基础设施。 Kubernetes是一个容器编排平台,旨在管理和编排容器化应用程序。它提供了一种在集群中运行、调度和管理容器化应用程序的方式。Kubernetes通过使用Pod、Service、Deployment等资源对象,为应用程序提供了弹性、可伸缩性和高可用性。 因此,OpenStack主要关注基础设施层面,而Kubernetes主要关注应用程序层面。它们可以在不同的层面为云计算提供支持,同时也可以在某些情况下协同工作。 OpenStack和Kubernetes(简称K8s)都是非常流行的开源云平台,但它们的目标和设计原则有所不同,因此具有不同的优缺点。 OpenStack是一种基于虚拟机的云平台,主要用于创建和管理虚拟机、存储、网络等基础设施资源。它提供了各种组件,如Nova、Cinder、Glance等,用于管理这些资源。OpenStack的优点包括: 灵活性:OpenStack提供了丰富的API和插件,可以轻松地与其他系统和工具进行集成和扩展。 多租户:OpenStack支持多租户,可以让不同的用户和组织共享相同的基础设施资源,从而提高资源利用率。 安全性:OpenStack提供了强大的安全功能,如访问控制、身份验证、审计等,以保护云环境中的敏感数据和工作负载。 开放性:OpenStack 是一个完全开源的项目,任何人都可以下载、使用和修改代码。 高度可定制性:OpenStack 提供了广泛的配置选项和可插拔的架构,可以根据实际需求进行定制。 大规模部署:OpenStack 适合用于大规模部署,可以管理数千个服务器和虚拟机。 多样化的服务:OpenStack 提供了多种服务,包括计算、存储、网络和安全等,可以满足各种不同的需求。 成熟的生态系统:OpenStack 有着成熟的生态系统,包括丰富的第三方工具和插件,可以帮助用户快速搭建自己的云环境。 但OpenStack也存在一些缺点: 复杂性:OpenStack是一个非常复杂的平台,需要大量的配置和管理工作,因此需要专业的技术人员来维护和管理。 资源消耗:由于OpenStack是基于虚拟机的,因此会消耗大量的计算和存储资源,这可能会影响整个系统的性能。 性能限制:虚拟机的性能可能受到物理硬件的限制,因此在某些情况下,OpenStack可能无法提供与原生硬件相同的性能,另外在处理大规模数据和高负载时,也有可能会出现性能问题 Kubernetes是一种基于容器的云平台,主要用于创建和管理容器化的应用程序。它提供了各种组件,如Pod、Service、Deployment等,用于管理容器和应用程序。Kubernetes的优点包括: 自动化管理:Kubernetes 可以自动化地管理容器的部署、伸缩和故障恢复等过程,降低了人工操作的成本和风险。 可移植性:Kubernetes支持多云环境和混合云环境,可以轻松地将应用程序移植到不同的云环境中。 高可用性:Kubernetes提供了强大的自动化功能,如自动重启、自动缩放等,可以确保应用程序始终可用。 容器编排:Kubernetes 提供了强大的容器编排功能,可以灵活地管理多个容器之间的关系和交互。 简单易用:Kubernetes 提供了简单易用的命令行工具和 Web 界面,使得用户可以轻松地进行管理和操作。 大规模部署:Kubernetes 可以处理数千个节点和容器的管理,适合于大规模部署。 但Kubernetes也存在一些缺点: 复杂性:虽然Kubernetes比OpenStack简单,但它仍然是一个非常复杂的平台,需要专业的技术人员来管理和维护。 部署难度大:部署K8s需要具备一定的技术水平,需要熟悉其各个组件的配置和交互方式,对于初学者来说存在一定的门槛。 网络性能问题:在K8s中,容器之间的网络通信需要通过overlay网络实现,会对网络性能产生一定影响。 存储管理问题:K8s对于存储的管理支持不够完善,对于分布式存储的管理存在一定问题。 openstack容器化 基于容器的可移植性优势,openstack也可以将容器化应用到项目维护当中: OpenStack容器化是将OpenStack服务组件以及相关依赖项和数据库都打包成Docker镜像的过程,以便在Kubernetes集群中进行部署和管理。这种方式可以简化OpenStack的安装和升级过程,并提高OpenStack的可移植性和可扩展性。 OpenStack和Kubernetes结合部署可以将OpenStack作为基础设施管理平台,将Kubernetes作为容器编排平台,从而实现容器化应用的快速部署和管理。下面是OpenStack和Kubernetes结合部署的优点和步骤: 优点: 容器编排和基础设施管理的集成。OpenStack提供的资源管理能力可以为Kubernetes提供基础设施的支持,例如存储、网络、安全等功能,使得Kubernetes可以更好地管理应用容器。 增强了应用的可伸缩性和弹性。Kubernetes可以根据应用的需要自动扩展和收缩容器数量,OpenStack可以提供资源池和自动化资源调度等功能,从而使得应用具备更好的可伸缩性和弹性。 便于应用部署和管理。通过结合OpenStack和Kubernetes,应用可以更快地部署和管理,同时可以更加灵活地管理应用的生命周期。 步骤: 配置OpenStack环境。安装OpenStack所需的基础环境,例如数据库、消息队列、虚拟化平台等。 部署OpenStack组件。安装OpenStack的各个组件,例如Keystone、Nova、Neutron、Glance等。 配置Kubernetes环境。安装Kubernetes所需的基础环境,例如etcd、Docker、Kubernetes二进制文件等。 部署Kubernetes组件。安装Kubernetes的各个组件,例如kube-apiserver、kube-controller-manager、kube-scheduler等。 集成OpenStack和Kubernetes。使用Kubernetes的OpenStack云提供商接口,将Kubernetes和OpenStack集成起来,从而使得Kubernetes可以使用OpenStack提供的资源管理能力。 部署应用。使用Kubernetes的yaml文件描述应用,从而实现应用容器的部署和管理。 需要注意的是,OpenStack和Kubernetes的结合部署需要考虑一些安全性和性能问题,例如安全认证、网络隔离、负载均衡等。此外,由于OpenStack和Kubernetes的复杂性较高,部署和管理也需要较高的技术水平和经验。...

    2023-10-27 技术 115
  • K8s集群安装记录及证书更新(1.20.6 docker版)

    1、升级系统到centos7.9.2009 yum update -y 2、修改主机名以示区分(不要带特别符号,最好是字母+数字即可) hostnamectl set-hostname XXXX1 &&/bin/bash [root@centos7demo ~]# hostnamectl set-hostname node1&&/bin/bash 3、修改网卡IP [root@master1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 注:/etc/sysconfig/network-scripts/ifcfg-ens33文件里的配置说明: NAME=ens33 #网卡名字,跟DEVICE名字保持一致即可 DEVICE=ens33 #网卡设备名,大家ip addr可看到自己的这个网卡设备名,每个人的机器可能这个名字不一样,需要写自己的 BOOTPROTO=static #static表示静态ip地址 ONBOOT=yes #开机自启动网络,必须是yes IPADDR=192.168.40.180 #ip地址,需要跟自己电脑所在网段一致 NETMASK=255.255.255.0 #子网掩码,需要跟自己电脑所在网段一致 GATEWAY=192.168.40.2 #网关,在自己电脑打开cmd,输入ipconfig /all可看到 DNS1=192.168.40.2 #DNS,在自己电脑打开cmd,输入ipconfig /all可看到  4、检查selinux是否关闭 [root@master1 ~]# getenforce Disabled #显示Disabled说明selinux已经关闭,如果是 如果未关闭,需要执行命令修改:sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 注意:修改selinux配置文件之后,重启机器,selinux配置才会生效 5、配置主机hosts文件,相互之间通过主机名互相访问,修改每台机器的/etc/hosts文件,增加如下三行: 192.168.40.180 master1 192.168.40.181 master2 192.168.40.182 node1 6、配置主机间免密码登陆 a、在master1主机执行:[root@master1 ~]# ssh-keygen -t rsa [root@master1 ~]# ssh-copy-id master1 [root@master1 ~]# ssh-copy-id master2 [root@master1 ~]# ssh-copy-id node1 在master2主机执行:[root@master2 ~]# ssh-keygen -t rsa [root@master2 ~]# ssh-copy-id master2 [root@master2 ~]# ssh-copy-id master1 [root@master2 ~]# ssh-copy-id node1 在node1主机执行:[root@node1 ~]#ssh-keygen -t rsa [root@node1 ~]# ssh-copy-id node1 [root@node1 ~]# ssh-copy-id master1 [root@node1 ~]# ssh-copy-id master2 测试 :ssh + 主机名 [root@master2 ~]# ssh master1 Last login: Fri Oct 13 21:16:02 2023 from node1 [root@master1 ~]# 7、关闭交换分区: a、#临时关闭 swapoff -a b、直接注释掉/etc/fstab 的交换分区挂载,重启后自动生效 问题:为什么要关闭swap交换分区? 答: Swap的交换分区是硬盘划分出来的,当如果机器内存不够,会使用swap分区,但是swap分区的性能相对内存要低很多,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就会导致初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定--ignore-preflight-errors=Swap来解决。 8、修改机器内核参数 [root@master1 ~]# modprobe br_netfilter [root@master1 ~]# cat /etc/profile [root@master1 ~]# echo "modprobe br_netfilter" >> /etc/profile [root@master1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF [root@master1 ~]# cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 同理其他两台主机操作类似, 加载内核配置文件, [root@master1 ~]# sysctl -p /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 9、关闭firewalld防火墙并设置为不再随机启动:systemctl stop firewalld ; systemctl disable firewalld 10、配置阿里云的repo源 安装rzsz命令:[root@master1 ~]# yum install lrzsz -y 安装scp:[root@master1 ~]# yum install openssh-clients -y 备份基础repo源 [root@master1 ~]# cd /etc/yum.repos.d/ [root@master1 yum.repos.d]# mkdir /root/repo.bak [root@master1 yum.repos.d]# mv * /root/repo.bak/ 下载阿里云的repo源 把资料包里的CentOS-Base.repo和epel.repo文件上传到master1主机的/etc/yum.repos.d/目录下 或者从网上下载。 master2和node1节点的配置可以采用类似操作。 也可以备份好原yum源,删除旧yum文件,直接从master1上复制到master2和node1上 [root@master1 yum.repos.d]# scp CentOS-Base.repo epel.repo master2:/etc/yum.repos.d CentOS-Base.repo 100% 2523 3.1MB/s 00:00 epel.repo 100% 1050 1.2MB/s 00:00 [root@master1 yum.repos.d]# scp CentOS-Base.repo epel.repo node1:/etc/yum.repos.d CentOS-Base.repo 100% 2523 1.5MB/s 00:00 epel.repo 配置国内阿里云docker的repo源 1、安装yum-utils ,命令:yum install yum-utils -y.= 2、下载安装docker的repo源 :yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@master1 yum.repos.d]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 已加载插件:fastestmirror adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo 3、配置安装k8s组件需要的阿里云的repo源 11、配置时间同步 (1、#安装时间同步命令ntpdate [root@master1 yum.repos.d]# yum install ntpdate -y (2、执行同步命令:[root@master1 yum.repos.d]# ntpdate cn.pool.ntp.org 14 Oct 00:35:14 ntpdate[9954]: no server suitable for synchronization found (3、编写计划任务,每隔一小时同步一次(所有主机节点一样的规则) [root@master1 yum.repos.d]# crontab -e [root@master1 yum.repos.d]# crontab -l /1 /usr/sbin/ntpdate cn.pool.ntp.org (4、#重启crond服务 [root@node1 ~]#service crond restart 12 安装基础软件包 三台主机可以时执行: yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm 遇到问题: 警告:/var/cache/yum/x86_64/7/epel/packages/epel-release-7-14.noarch.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 检索密钥 获取 GPG 密钥失败:[Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7" 解决办法:缺失RPM-GPG-KEY-EPEL-7,进入目录直接wget下载 cd /etc/pki/rpm-gpg wget https://archive.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 需要执行清理命令:yum clean all 然后就可以正常安装了。 13、安装docker服务,docker-ce的20.10.6版本 安装命令:yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io -y 启动docker,设置为开机启动并查看当前docker情况:systemctl start docker && systemctl enable docker && systemctl status docker 14、配置docker镜像加速器和驱动 [root@master1 ~]# vim /etc/docker/daemon.json { "registry-mirrors":["https://w70c62mv.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } 保存退出来,scp命令复制到master2和node1, scp daemon.json master2:/etc/docker scp daemon.json node1:/etc/docker 修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。 [root@master1 ~]# systemctl daemon-reload&&systemctl restart docker [root@master1 ~]# systemctl status docker 14、安装初始化k8s需要的软件包 发送安装命令到三台机器 , yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 [root@master1 ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 [root@master2 ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 [root@node1 ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 注:每个软件包的作用 Kubeadm: kubeadm是一个工具,用来初始化k8s集群的 kubelet: 安装在集群所有节点上,用于启动Pod的 kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件 15、通过keepalive+nginx实现k8s apiserver节点高可用 1、安装nginx主备: 在master1和master2上做nginx主备安装 [root@master1 ~]# yum install nginx keepalived -y [root@master2 ~]# yum install nginx keepalived -y 2、修改nginx配置文件。主备的配置需要保持一致 vim /etc/nginx/nginx.com 增加: #四层负载均衡,为两台Master Apiserver组件提供负载均衡 stream { log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent'; access_log /var/log/nginx/k8s-access.lgo main; upstream k8s-apiserver { server 192.168.40.180:6443 weight=5 max_fails=3 fail_timeout=30s; server 192.168.40.181:6443 weight=5 max_fails=3 fail_timeout=30s; } server{ 操作如下,也可以直接备份原配置文件,然后rz上传本地写好的配置文件。 [root@master1 ~]# vim /etc/nginx/nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } 四层负载均衡,为两台Master apiserver组件提供负载均衡 stream { log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent'; access_log /var/log/nginx/k8s-access.log main; upstream k8s-apiserver { server 192.168.40.180:6443 weight=5 max_fails=3 fail_timeout=30s; server 192.168.40.181:6443 weight=5 max_fails=3 fail_timeout=30s; } server { listen 16443; # 由于nginx与master节点复用,这个监听端口不能是6443,否则会冲突 proxy_pass k8s-apiserver; } } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80 default_server; server_name _; location / { } } } listen 16443;#由于nginx与master节点复用,这个监听端口不能是6443,否则会有冲突 proxy_pass k8s-apiserver; } } master2也采用相同操作。 3)、keepalived配置 a、主keepalived [root@master1 ~]# vim /etc/keepalived/keepalived.conf global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER } vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" } vrrp_instance VI_1 { state MASTER interface ens33 # 修改为实际网卡名 virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的 priority 100 # 优先级,备服务器设置 90 advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS auth_pass 1111 } # 虚拟IP virtual_ipaddress { 192.168.40.199/24 } track_script { check_nginx } } #vrrp_script:指定检查nginx工作状态脚本(根据nginx状态判断是否故障转移) #virtual_ipaddress:虚拟IP(VIP) [root@master1 ~]# vim /etc/keepalived/check_nginx.sh !/bin/bash 1、判断Nginx是否存活 counter=$(ps -ef |grep nginx | grep sbin | egrep -cv "grep|$$" ) if [ $counter -eq 0 ]; then     #2、如果不存活则尝试启动Nginx     service nginx start     sleep 2     #3、等待2秒后再次获取一次Nginx状态     counter=$(ps -ef |grep nginx | grep sbin | egrep -cv "grep|$$" )     #4、再次进行判断,如Nginx还不存活则停止Keepalived,让地址进行漂移     if [ $counter -eq 0 ]; then         service  keepalived stop     fi fi [root@master1 ~]# chmod +x /etc/keepalived/check_nginx.sh master2采用相同的操作,配置文件保存一致。 4、启动服务: 启动之前先安装nginx-stream模块 [root@master1 ~]# yum install nginx-mod-stream -y [root@master1 ~]# systemctl daemon-reload 启动nginx和keepalived [root@master1 ~]# systemctl start nginx keepalived&&systemctl enable nginx keepalived 查看状况 [root@master1 ~]# systemctl status keepalived ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled) Active: active (running) since 六 2023-10-14 10:59:10 CST; 16s ago Main PID: 19607 (keepalived) CGroup: /system.slice/keepalived.service ├─19607 /usr/sbin/keepalived -D ├─19608 /usr/sbin/keepalived -D └─19609 /usr/sbin/keepalived -D 5、测试vip是否绑定成功 [root@master1 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:81:87:5a brd ff:ff:ff:ff:ff:ff inet 192.168.40.180/24 brd 192.168.40.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.40.199/24 scope global secondary ens33 valid_lft forever preferred_lft forever inet6 fe80::aaff:e4a0:d160:38d3/64 scope link noprefixroute valid_lft forever preferred_lft forever 6、测试keepalived: 停掉master1上的keepalived,Vip会漂移到master2 [root@master1 ~]# service keepalived stop [root@master2]# ip addr 16、kubeadm初始化k8s集群 a、在master1节点上创建kubeadm-config.yml文件 [root@master1 ~]# cat kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubernetesVersion: v1.20.6 controlPlaneEndpoint: 192.168.40.199:16443 imageRepository: registry.aliyuncs.com/google_containers apiServer: certSANs: 192.168.40.180 192.168.40.181 192.168.40.182 192.168.40.199 networking: podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/16 apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs b、把初始化k8s集群需要的离线镜像包k8simage-1-20-6.tar.gz上传到master1、master2、node1机器上,手动解压: [root@master1 ~]# docker load -i k8simage-1-20-6.tar.gz [root@master2 ~]# docker load -i k8simage-1-20-6.tar.gz [root@node1 ~]# docker load -i k8simage-1-20-6.tar.gz 初始化k8s集群命令: [root@master1]# kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=SystemVerification 特别提醒:--image-repository registry.aliyuncs.com/google_containers为保证拉取镜像不到国外站点拉取,手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm默认从k8s.gcr.io拉取镜像。 我们本地有导入到的离线镜像,所以会优先使用本地的镜像。 mode: ipvs 表示kube-proxy代理模式是ipvs,如果不指定ipvs,会默认使用iptables,但是iptables效率低,所以我们生产环境建议开启ipvs,阿里云和华为云托管的K8s,也提供ipvs模式。 安装成功最后有如下提示: Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.40.199:16443 --token qnmgnl.mk5nisfwa4lbzsc4 \ --discovery-token-ca-cert-hash sha256:99902cb959dda1bb32061bedcc364233a6cc5091e0c5c0832277a44f31abc74f 配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理 [root@master1 ~]# mkdir -p $HOME/.kube [root@master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config 查看安装状态: [root@master1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master1 NotReady control-plane,master 5m45s v1.20.6 此时集群状态还是NotReady状态,是因为还没有安装网络插件 17、扩容k8s集群-添加master节点 把master1节点的证书拷贝到master2上, 在master2创建证书存放目录: [root@master2 ~]# cd /root/&&mkdir -p /etc/kubernetes/pki/etcd&&mkdir -p ~/.kube/ 返回master1节点上,把节点证书传一份给master2上。 [root@master1 pki]# scp ca.crt ca.key master2:/etc/kubernetes/pki/ [root@master1 pki]# scp sa.key sa.pub front-proxy-ca.crt front-proxy-ca.key master2:/etc/kubernetes/pki/ [root@master1 pki]# scp ./etcd/ca.crt master2:/etc/kubernetes/pki/etcd/ [root@master1 pki]# scp ./etcd/ca.key master2:/etc/kubernetes/pki/etcd/ 然后返回master1上获取加入集群命令 ,执行:kubeadm token create --print-join-command [root@master1 pki]# kubeadm token create --print-join-command kubeadm join 192.168.40.199:16443 --token 5u8ixe.x8kcchoipnuoqtt6 --discovery-token-ca-cert-hash sha256:99902cb959dda1bb32061bedcc364233a6cc5091e0c5c0832277a44f31abc74f 然后在master2上执行:(管理节点 加上 --control-plane ) kubeadm join 192.168.40.199:16443 --token 5u8ixe.x8kcchoipnuoqtt6 --discovery-token-ca-cert-hash sha256:99902cb959dda1bb32061bedcc364233a6cc5091e0c5c0832277a44f31abc74f --control-plane --ignore-preflight-errors=SystemVerification 然后在node1上执行: kubeadm join 192.168.40.199:16443 --token 5u8ixe.x8kcchoipnuoqtt6 --discovery-token-ca-cert-hash sha256:99902cb959dda1bb32061bedcc364233a6cc5091e0c5c0832277a44f31abc74f --ignore-preflight-errors=SystemVerification 返回master1查看集群状况:kubectl get nodes [root@master1 pki]# kubectl get nodes NAME STATUS ROLES AGE VERSION master1 NotReady control-plane,master 96m v1.20.6 master2 NotReady control-plane,master 37s v1.20.6 node1 NotReady 11m v1.20.6 可以看到node1的ROLES角色为空,就表示这个节点是工作节点。 可以把node1的ROLES变成work,按照如下方法: [root@master1 ~]# kubectl label node node1 node-role.kubernetes.io/worker=worker [root@master1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master1 NotReady control-plane,master 111m v1.20.6 master2 NotReady control-plane,master 15m v1.20.6 node1 NotReady worker 26m v1.20.6 注意:上面可以看出集群主机的状态都是NotReady状态,说明没有安装网络插件 [root@master1 ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-7f89b7bc75-dqrxj 0/1 Pending 0 112m coredns-7f89b7bc75-qzc9p 0/1 Pending 0 112m etcd-master1 1/1 Running 0 112m etcd-master2 1/1 Running 0 16m kube-apiserver-master1 1/1 Running 0 112m kube-apiserver-master2 1/1 Running 0 16m kube-controller-manager-master1 1/1 Running 1 112m kube-controller-manager-master2 1/1 Running 0 16m kube-proxy-dh22b 1/1 Running 0 112m kube-proxy-mp5xm 1/1 Running 0 27m kube-proxy-rp972 1/1 Running 0 16m kube-scheduler-master1 1/1 Running 1 112m kube-scheduler-master2 1/1 Running 0 16m 18、安装kubernetes网络组件-Calico 上传calico.yaml到master1上,使用yaml文件安装calico 网络插件 安装命令:[root@master1 ~]# kubectl apply -f calico.yaml 查询运行状况: [root@master1 ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-6949477b58-nzh84 1/1 Running 0 70s calico-node-cggnz 1/1 Running 0 70s calico-node-fm7rv 1/1 Running 0 70s calico-node-k28fk 1/1 Running 0 70s coredns-7f89b7bc75-dqrxj 1/1 Running 0 117m coredns-7f89b7bc75-qzc9p 1/1 Running 0 117m etcd-master1 1/1 Running 0 117m etcd-master2 1/1 Running 0 21m kube-apiserver-master1 1/1 Running 0 117m kube-apiserver-master2 1/1 Running 0 21m kube-controller-manager-master1 1/1 Running 1 117m kube-controller-manager-master2 1/1 Running 0 21m kube-proxy-dh22b 1/1 Running 0 117m kube-proxy-mp5xm 1/1 Running 0 32m kube-proxy-rp972 1/1 Running 0 21m kube-scheduler-master1 1/1 Running 1 117m kube-scheduler-master2 1/1 Running 0 21m 查看集群运行状况 [root@master1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master1 Ready control-plane,master 118m v1.20.6 master2 Ready control-plane,master 21m v1.20.6 node1 Ready worker 32m v1.20.6 19、测试在k8s创建pod是否可以正常访问网络 把busybox-1-28.tar.gz上传到node1节点,手动解压 [root@node1 ~]# docker load -i busybox-1-28.tar.gz 在master1节点上执行:kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh 进入容器测试网络: / # ping www.baidu.com PING www.baidu.com (39.156.66.18): 56 data bytes 64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms 通过上面可以看到能访问网络,说明calico网络插件已经被正常安装了 20 、测试coredns是否正常 [root@master1 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh If you don't see a command prompt, try pressing enter. / # nslookup kubernetes.default.svc.cluster.local Server: 10.96.0.10 Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local Name: kubernetes.default.svc.cluster.local Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local / # 21、延长k8s证书 查看证书有效时间: openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not 显示如下,通过下面可看到ca证书有效期是10年 [root@master1 ~]# openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not Not Before: Oct 14 04:45:12 2023 GMT Not After : Oct 11 04:45:12 2033 GMT openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not 显示如下,通过下面可看到apiserver证书有效期是1年 [root@master1 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not Not Before: Oct 14 04:45:12 2023 GMT Not After : Oct 13 04:45:12 2024 GMT 把资料包里的update-kubeadm-cert.sh文件上传到master1和master2节点,分别执行如下操作: 1)给update-kubeadm-cert.sh证书授权可执行权限 [root@master1~]#chmod +x update-kubeadm-cert.sh 2)执行下面命令,修改证书过期时间,把时间延长到10年 [root@master1 ~]# ./update-kubeadm-cert.sh all 3)给update-kubeadm-cert.sh证书授权可执行权限 [root@master2~]#chmod +x update-kubeadm-cert.sh 4)执行下面命令,修改证书过期时间,把时间延长到10年 [root@master2 ~]# ./update-kubeadm-cert.sh all 3)在master1节点查询Pod是否正常,能查询出数据说明证书签发完成 kubectl get pods -n kube-system 显示如下,能够看到pod信息,说明证书签发正常:...

    2023-10-27 技术 199
  • K8s单节点高可用集群安装记录(1-20-6 docker版)

    1、通过centos模板机创建三台主机,修改主机名,设置网络静态地址如下: 主机1:hmaster1 IP 192.168.40.180 主机2:hnode1 IP 192.168.40.181 主机3:hnode2 IP 192.168.40.182 2、检查SELINUX是否关闭,执行getenforce 打开修改 vim /etc/selinux/config 编辑 SELINUX=disabled 保存退出,重启服务器才可生效。 其他命令: sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #修改selinux配置文件之后,重启机器,selinux配置才能永久生效 3、配置主机hosts文件,相互之间通过主机名互相访问,修改每台机器的/etc/hosts文件,增加如下三行: 192.168.40.180 hmaster1 192.168.40.181 hnode1 192.168.40.182 hnode2 [root@hmaster1 ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.40.180 hmaster1 192.168.40.181 hnode1 192.168.40.182 hnode2 4、配置主机之间无密码登录命令 在三主机分别执行:ssh-keygen -t rsa #生成登陆秘钥 ssh-copy-id hmaster1 ssh-copy-id hnode1 ssh-copy-id hnode2 5、关闭交换分区swap,提升性能 临时关闭 root@hmaster1 ~]# swapoff -a #永久关闭:注释掉/etc/fstab里的swap挂载,给swap这行开头加一下注释 问题1:为什么要关闭swap交换分区? Swap是交换分区,如果机器内存不够,会使用swap分区,但是swap分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定--ignore-preflight-errors=Swap来解决。 6、修改机器内核参数,设置IP转发 [root@hmaster1 ~]# modprobe br_netfilter [root@hmaster1 ~]# echo "modprobe br_netfilter" >> /etc/profile [root@hmaster1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF [root@hmaster1 ~]# sysctl -p /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 hnode1和hnode2采用相同操作。 7、关闭firewalld防火墙,并设置随机不启动 命令1:systemctl stop firewalld ; systemctl disable firewalld 也可以执行命令2:systemctl disable firewalld --now 如下: [root@hmaster1 ~]# ps -ef|grep firewall root 753 1 0 12:18 ? 00:00:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid root 18709 18598 0 18:12 pts/0 00:00:00 grep --color=auto firewall [root@hmaster1 ~]# systemctl disable firewalld --now Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@hmaster1 ~]# ps -ef|grep firewall root 18768 18598 0 18:12 pts/0 00:00:00 grep --color=auto firewall 8、配置阿里云的repo源 命令: yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 9、安装基础依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm 10、 配置安装k8s组件需要的阿里云的repo源 [root@hmaster1 ~]#vim /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源文件复制到其他节点相应的目录下。 [root@hmaster1 ~]# scp /etc/yum.repos.d/kubernetes.repo hnode1:/etc/yum.repos.d/ kubernetes.repo 100% 128 160.2KB/s 00:00 [root@hmaster1 ~]# scp /etc/yum.repos.d/kubernetes.repo hnode2:/etc/yum.repos.d/ kubernetes.repo 100% 128 167.7KB/s 00:00 11、配置时间同步 ntpdate chrony 安装ntpdate命令 [root@hmaster1 ~]# yum install ntpdate -y #跟网络时间做同步 [root@hmaster1 ~]# ntpdate cn.pool.ntp.org #把时间同步做成计划任务 [root@hmaster1 ~]# crontab -e * */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org wq保存退出,重启计划任务 二、安装docker服务 1、安装 docker-ce 多主机同步执行:yum install -y docker-ce-20.10.6 2、启动docker: systemctl enable docker --now 查看docker运行状况 systemctl status docker 3、配置docker镜像加速器和驱动 vim /etc/docker/daemon.json { "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"], "exec-opts": ["native.cgroupdriver=systemd"] } 修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。 systemctl daemon-reload #加载镜像加速器配置文件 systemctl restart docker #重启docker systemctl status docker #检查docker是否正常,如果不能正常启动,检查配置文件 4、安装初始化k8s需要的软件包 yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 systemctl enable kubelet #设置kubelet随机启动,不然会导致pod无法启动。 注:每个软件包的作用 Kubeadm: kubeadm是一个工具,用来初始化k8s集群的 kubelet: 安装在集群所有节点上,用于启动Pod的 kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件 5、kubeadm初始化k8s集群 将镜像包k8simage-1-20-6.tar.gz上传到三台服务器上,手动解压: docker load -i k8simage-1-20-6.tar.gz 三个机器都需要解压 6、使用kubeadm初始化k8s集群 [root@hmaster1~]# kubeadm config print init-defaults > kubeadm.yaml #获取初始化模板文件 kubeadm.yaml的修改配置如下: [root@hmaster1 ~]# cat kubeadm.yaml apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: groups: system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: signing authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.40.180 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: hmaster1 taints: effect: NoSchedule key: node-role.kubernetes.io/master apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.20.6 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个 scheduler: {} 追加如下几行 apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd kubeadm.yaml修改后执行以下命令初始化kubernetes集群 kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification 初始化成功后会有 kubeadm join ****类似字样,如本次实验的结果如下: ******** Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.40.180:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:7d94828271cba0b82e91497c7780d0079241c29937e2abd4d814579cb3317de0 扩展:kubeadm init初始化流程分析 1) 检查执行 init 命令的用户是否为 root,如果不是 root,直接快速失败(fail fast); 2) 检查待安装的 k8s 版本是否被当前版本的 kubeadm 支持(kubeadm 版本 >= 待安装 k8s 版本); 3) 检查防火墙,如果防火墙未关闭,提示开放端口 10250; 4) 检查端口是否已被占用,6443(或你指定的监听端口)、10257、10259; 5) 检查文件是否已经存在,/etc/kubernetes/manifests/*.yaml; 6) 检查是否存在代理,连接本机网络、服务网络、Pod网络,都会检查,目前不允许代理; 7) 检查容器运行时,使用 CRI 还是 Docker,如果是 Docker,进一步检查 Docker 服务是否已启动,是否设置了开机自启动; 8) 对于 Linux 系统,会额外检查以下内容: 8.1) 检查以下命令是否存在:crictl、ip、iptables、mount、nsenter、ebtables、ethtool、socat、tc、touch; 8.2) 检查 /proc/sys/net/bridge/bridge-nf-call-iptables、/proc/sys/net/ipv4/ip-forward 内容是否为 1; 8.3) 检查 swap 是否是关闭状态; 9) 检查内核是否被支持,Docker 版本及后端存储 GraphDriver 是否被支持; 对于 Linux 系统,还需检查 OS 版本和 cgroup 支持程度(支持哪些资源的隔离); 10) 检查主机名访问可达性; 11) 检查 kubelet 版本,要高于 kubeadm 需要的最低版本,同时不高于待安装的 k8s 版本; 12) 检查 kubelet 服务是否开机自启动; 13) 检查 10250 端口是否被占用; 14) 如果开启 IPVS 功能,检查系统内核是否加载了 ipvs 模块; 15) 对于 etcd,如果使用 Local etcd,则检查 2379 端口是否被占用, /var/lib/etcd/ 是否为空目录; 如果使用 External etcd,则检查证书文件是否存在(CA、key、cert),验证 etcd 服务版本是否符合要求; 16) 如果使用 IPv6, 检查 /proc/sys/net/bridge/bridge-nf-call-iptables、/proc/sys/net/ipv6/conf/default/forwarding 内容是否为 1; 以上就是 kubeadm init 需要检查的所有项目了! 完成安装前的配置 1) 在 kube-system 命名空间创建 ConfigMap kubeadm-config,同时对其配置 RBAC 权限; 2) 在 kube-system 命名空间创建 ConfigMap kubelet-config-,同时对其配置 RBAC 权限; 3) 为当前节点(Master)打标记:node-role.kubernetes.io/master=; 4) 为当前节点(Master)补充 Annotation; 5) 如果启用了 DynamicKubeletConfig 特性,设置本节点 kubelet 的配置数据源为 ConfigMap 形式; 6) 创建 BootStrap token Secret,并对其配置 RBAC 权限; 7) 在 kube-public 命名空间创建 ConfigMap cluster-info,同时对其配置 RBAC 权限; 8) 与 apiserver 通信,部署 DNS 服务; 9) 与 apiserver 通信,部署 kube-proxy 服务; 10) 如果启用了 self-hosted 特性,将 Control Plane 转为 DaemonSet 形式运行; 11) 打印 join 语句; #配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理 [root@hmaster1 ~]# mkdir -p $HOME/.kube [root@hmaster1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@hmaster1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config [root@hmaster1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION hmaster1 NotReady control-plane,master 18m v1.20.6 在hnode1、hnode2工作节点上执行以下命令,加入集群(获取的token一般24小时内有效) kubeadm join 192.168.40.180:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:7d94828271cba0b82e91497c7780d0079241c29937e2abd4d814579cb3317de0 --ignore-preflight-errors=SystemVerification 返回hmaster1节点查看 [root@hmaster1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION hmaster1 NotReady control-plane,master 26m v1.20.6 hnode1 NotReady <none> 4m49s v1.20.6 hnode2 NotReady <none> 10s v1.20.6 给工作节点打标签可执行以下命令: kubectl label node hnode2 node-role.kubernetes.io/worker=worker [root@hmaster1 ~]# kubectl label node hnode2 node-role.kubernetes.io/worker=worker node/hnode2 labeled [root@hmaster1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION hmaster1 NotReady control-plane,master 37m v1.20.6 hnode1 NotReady <none> 15m v1.20.6 hnode2 NotReady worker 10m v1.20.6 [root@hmaster1 ~]# kubectl label node hnode1 node-role.kubernetes.io/worker=worker node/hnode1 labeled [root@hmaster1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION hmaster1 NotReady control-plane,master 37m v1.20.6 hnode1 NotReady worker 16m v1.20.6 hnode2 NotReady worker 11m v1.20.6 集群状态还是NotReady状态,因为没有安装网络插件...

    2023-10-27 技术 156
  • k8s核心资源Pod介绍——Pod是什么?

    在K8s中,pod是K8s体系中最小调度单元,我们通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。 Pod(就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的 “逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。 如果我们把pod看成是一个“豌豆荚”,豆子看作容器(dokcer/container),里面可有一个豆子,也可能很多“豆子”(容器)。豆子多少取决于资源的分配,在K8s中我们可以过过pod的yaml文件来安排。 一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。 关于Pod的,K8s的官方描述文档:https://kubernetes.io/docs/concepts/workloads/pods/ pod的作用: 1、Pod是由一组紧耦合的容器组成的容器组,当然目前最流行的就是Docker、containerd、podman容器,Pod就可以作为1或者多个容器的载体。 2、Pod中的所用容器会被一致调度、同节点部署,并且在一个“共享环境”中运行。Pod想成一个车:车里面好多座位,每个座位都坐不同的人,每个座位想成是一个容器,这里的“共享环境”包括以下几点: 1)所有容器共享一个IP地址和端口空间,意味着容器之间可以通过localhost高效访问,不能有端口冲突 2)允许容器之间共享存储卷,通过文件系统交互信息 3、有些容器需要紧密联系,需要一起工作。Pod提供了比容器更高层次的抽象, Pod中的所有容器使用同一个网络的namespace,即相同的IP地址和Port空间。它们可以直接用localhost通信。同样的,这些容器可以共享存储,当K8s挂载Volume到Pod上,本质上是将volume挂载到Pod中的每一个容器里。...

    2023-10-27 技术 97
  • K8s手动强制删除处于terminating状态的Pod命令

    root用户下执行:kubectl delete pod xxx --force --grace-period=0 重启kubelet服务—实在不行直接干掉整个命名空间...

    2023-10-25 杂记 120
  • Centos配置登陆github及使用

    首先确保安装了git: git --version 如果没有安装,使用下述命令进行安装,若安装了则跳过2: yum install git -y 配置git: git config --global user.name “your name” git config --global user.email "your_email@example.com" #配置邮箱,尽量填写你的github注册邮箱 git config --list #检查配置 进入目录~/.ssh下,执行下面脚本一路Enter生成ssh密钥和公钥: cd ~/.ssh ssh-keygen -t ecdsa -b 521 -C "your_email@example.com" #邮箱填写你的github注册邮箱 此时该目录下生成两个文件:id_ecdsa和id_ecdsa.pub,打开id_ecdsa.pub,复制内容, cd ~/.ssh vi id_ecdsa.pub# 内容类似下面 ecdsa-sha2-nistp521 AAAAE2VjZHNhLXN********1MjEAAAAIbmlzdHA1MjEAAACFBAAptVsQ1Pfj1XfaCRmbHZNI+xfr/L1QXvrBwvGEjYIvmlfjns0YAYGy7GCRlshctz3peRbW1ID4OS7YSKB+516W/ABztfJiHGHfkWxqtr8HBymUXC4epbKC4PaLsNhTLM690Q3ftRuFv1cFssYXPXuIIVFtA1z8J4IA0axNO/uUB4pHgg== your_email@example.com 打开github登陆,找到如下位置: 顺序: 5.1.点头像找settings; 5.2.左侧菜单栏找到 SSH and GPG keys; 5.3.点击右上角New SSH key粘贴刚才复制的公钥内容,命名随意哈。 输入以下脚本测试key,,看能否登陆github. ssh -T git@github.com 看到下面提示,输入yes即可; The authenticity of host 'github.com (207.97.227.239)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)? 成功后回显示 Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access. 注意:这里通过ssh配置,因此git配置远程仓库使用ssh型的: Git基本使用操作 初始化git git init 本地添加暂存 git add . 提交到本地仓库 git commit -m 'first commit' 添加远程仓库 git remote add origin git@github.com:yourname/xxxxx.git 提交到远程github仓库 git push origin branch_name...

    2023-10-22 技术 115
  • K8s中ctr和crictl区别

    首先,出身不一样,ctr 是 containerd 的一个客户端工具,而crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。 其次,ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互; 所以一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。 ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。 [root@ctdmaster1 ~]# ctr -v ctr containerd.io 1.6.6 [root@ctdmaster1 ~]# crictl -v crictl version v1.26.0 [root@ctdmaster1 ~]# 由于 Containerd 也有 namespaces 的概念,对于上层编排系统的支持,ctr的客户端 主要区分了 3 个命名空间分别是k8s.io、moby和default,以上我们用crictl操作的均在k8s.io命名空间,使用ctr 看镜像列表就需要加上-n 参数。crictl 是只有一个k8s.io命名空间,但是没有-n 参数。 【温馨提示】ctr images pull 拉取的镜像默认放在default,而 crictl pull 和 kubelet 默认拉取的镜像都在 k8s.io 命名空间下。所以通过ctr导入镜像的时候特别注意一点,最好指定命名空间。 注意-n不能放在命令最后面,下面几行查看的镜像是一样的 ctr -n=k8s.io image ls ctr -n k8s.io image ls crictl 没有-n参数,操作都在k8s.io命名空间下。 crictl image ls crictl images crictl image list = ctr -n=k8s.io image list crictl image ls = ctr -n=k8s.io image ls crictl images = ctr -n=k8s.io image list crictl images = ctr -n=k8s.io image ls 使用ctr命令指定命名空间导入镜像 ctr -n=k8s.io image import dashboard.tar 查看镜像,可以看到可以查询到了 crictl images 三、命令的比较 详细命令差别: 命令ctrcrictl查看运行的容器ctr task ls/ctr container ls  crictl ps  查看镜像ctr image ls  crictl images  查看容器日志  无  crictl logs  查看容器数据信息  ctr container info  crictl inspect  查看容器资源  无crictl stats启动/关闭已有的容器  ctr task start/kill  crictl start/stop  运行一个新的容器  ctr run  无(最小单元为pod)  修改镜像标签  ctr image tag  无创建一个新的容器  ctr container create  crictl create  导入镜像  ctr image import  无导出镜像  ctr image export  无删除容器  ctr container rm  crictl rm  删除镜像  ctr image rm  crictl rmi  拉取镜像  ctr image pull  crictl pull  推送镜像  ctr image push  无在容器内部执行命令  无  crictl exec ...

    2023-10-21 未分类 212
  • VMware Workstation(Win+Linux)虚拟机合集+激活密钥

    最新版本直链 2023年07月04日 11:24:06 Windows:https://www.vmware.com/go/getworkstation-win Linux:https://www.vmware.com/go/getworkstation-linux 系统要求 VM17:硬件要求高,Windows 10 或更高版64位 VM16:硬件要求高,Windows 10 或更高版64位 VM15:硬件要求中,Windows 7 或更高版64位 VM12:硬件要求低,Windows 7 或更高版64位 VM10:Windows XP 或更高版32位和64位旧版 注意: VM17版本已经砍掉了虚拟磁盘映射功能,如果你要用这个功能的话千万别下载 VM16.1.2 是完美版,之后的版本,官方允许磁盘映射一次,再映射就报错了。 VM14版本开始不支持某些旧的电脑硬件,会提示不支持或安装失败, 如遇到请退回12版本。 【VMware Workstation 17】 VMware Workstation v17.x 永久许可证激活密钥: MC60H-DWHD5-H80U9-6V85M-8280D 4A4RR-813DK-M81A9-4U35H-06KND NZ4RR-FTK5H-H81C1-Q30QH-1V2LA JU090-6039P-08409-8J0QH-2YR7F 4Y09U-AJK97-089Z0-A3054-83KLA 4C21U-2KK9Q-M8130-4V2QH-CF810 VMware Workstation 17.0.2 Pro for Windows 发布日期: 2023-04-25 文件大小: 607.7 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1702-WIN&productId=1376&rPId=104681 下载地址: https://download3.vmware.com/software/WKST-1702-WIN/VMware-workstation-full-17.0.2-21581411.exe VMware Workstation 17.0.2 Pro for Linux 发布日期: 2023-04-25 文件大小: 513.94 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1702-LX&productId=1376&rPId=104682 下载地址: https://download3.vmware.com/software/WKST-1702-LX/VMware-Workstation-Full-17.0.2-21581411.x86_64.bundle ---------分---------隔---------线--------- 【VMware Workstation 16】 VMware Workstation v16.x 永久许可证激活密钥: ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2DXQE-M2UT6 ZF71R-DMX85-08DQY-8YMNC-PPHV8 110L3-9135J-M807A-08ARK-84V7L FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD VMware Workstation 16.1.2 Pro for Windows 发布日期: 2021-05-18 文件大小: 621.29 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1612-WIN&productId=1038&rPId=98567 下载地址: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.1.2-17966106.exe VMware Workstation 16.1.2 Pro for Linux 发布日期: 2021-05-18 文件大小: 502.98 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1612-LX&productId=1038&rPId=98568 https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-16.1.2-17966106.x86_64.bundle VMware Workstation 16.2.5 Pro for Windows 发布日期: 2022-12-13 文件大小: 615.58 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1625-WIN&productId=1038&rPId=98567 https://download3.vmware.com/software/WKST-1625-WIN/VMware-workstation-full-16.2.5-20904516.exe VMware Workstation 16.2.3 Pro for Windows 发布日期: 2022-03-10 文件大小: 615.43 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1623-WIN-NEW&productId=1038&rPId=98567 https://download3.vmware.com/software/WKST-1623-WIN-New/VMware-workstation-full-16.2.3-19376536.exe ---------分---------隔---------线--------- 【VMware Workstation 15】 VMware Workstation v15.x 永久许可证激活密钥: FC7D0-D1YDL-M8DXZ-CYPZE-P2AY6 FC14U-4MW8L-081DP-E7WET-WQHFF GG71H-FDWDN-0884P-LPX79-QUHU2 ZF1J2-29W8K-M859P-14XGG-NAKVA VMware Workstation 15.5.7 Pro for Windows 发布日期: 2020-11-19 文件大小: 552.28 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1557-WIN&productId=799&rPId=55775 下载地址: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-15.5.7-17171714.exe VMware Workstation 15.5.7 Pro for Linux 发布日期: 2020-11-19 文件大小: 512.84 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1557-LX&productId=799&rPId=55776 下载地址: https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-15.5.7-17171714.x86_64.bundle ---------------分---------隔---------线--------------- 【VMware Workstation 14】 VMware Workstation v14.x 永久许可证激活密钥: FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ZC3WK-AFXEK-488JP-A7MQX-XL8YF AC5XK-0ZD4H-088HP-9NQZV-ZG2R4 ZC5XK-A6E0M-080XQ-04ZZG-YF08D ZY5H0-D3Y8K-M89EZ-AYPEG-MYUA8 VMware Workstation 14.1.8 Pro for Windows 发布日期: 2019-11-12 文件大小: 487.14 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1418-WIN&productId=686&rPId=39186 下载地址: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-14.1.8-14921873.exe VMware Workstation 14.1.7 Pro for Linux 发布日期: 2019-03-28 文件大小: 439.75 MB https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1417-LX&productId=686&rPId=39187 下载地址: https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-14.1.7-12989993.x86_64.bundle ---------分---------隔---------线--------- 【VMware Workstation 12】 VMware Workstation v12.x 永久许可证激活密钥: VF5XA-FNDDJ-085GZ-4NXZ9-N20E6 1F04Z-6D111-7Z029-AV0Q4-3AEH8 GA1T2-4JF1P-4819Y-GDWEZ-XYAY8 VY1DU-2VXDH-08DVQ-PXZQZ-P2KV8 YG7XR-4GYEJ-4894Y-VFMNZ-YA296 VMware Workstation 12 for Windows 发行日期: 2018-01-10 文件大小: 400.86 MB https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1259-WIN&productId=524&rPId=20848 下载地址: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-12.5.9-7535481.exe VMware Workstation 12 for Linux 发行日期: 2018-01-10 文件大小: 456.00 MB https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1259-LX&productId=524&rPId=20849 下载地址: https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-12.5.9-7535481.x86_64.bundle ---------分---------隔---------线--------- 【VMware Workstation 11】 VMware Workstation v11.x 永久许可证激活密钥: 1F04Z-6D111-7Z029-AV0Q4-3AEH8 AA5M8-8NGD3-M805Y-K5Q7G-X28E6 YU7NK-4NX92-48EWY-QMNQX-MZUD8 VF3M8-44X42-0850Q-4ZQXV-ZPUZ8 VA3HR-49YEQ-M854P-0QZEC-NVAU6 VMware Workstation 11 for Windows 发行日期: 2016-05-12 文件大小: 303.11 MB https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1114-WIN&productId=462&rPId=11037 下载地址: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-11.1.4-3848939.exe VMware Workstation 11 for Linux 发行日期: 2016-05-12 文件大小: 413.03 MB https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1114-LX&productId=462&rPId=11037 下载地址: https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-11.1.4-3848939.x86_64.bundle ---------分---------隔---------线--------- 【VMware Workstation 10】支持32位系统 VMware Workstation v10.x 永久许可证激活密钥: 5F29M-48312-8ZDF9-A8A5K-2AM0Z JZ6WK-4529P-HZAA1-9RAG6-33JNR 5F4EV-4Z0DP-XZHN9-0L95H-02V17 VMware Workstation 10 for Windows 发行日期: 2015-07-02 文件大小: 495.52 MB https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1007-WIN&productId=362&rPId=8491 下载地址: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-10.0.7-2844087.exe VMware Workstation 10 for Linux(32位) 发行日期: 2015-05-05 文件大小: 430.51 MB https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1006-LX&productId=362&rPId=8490 下载地址: https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-10.0.6-2700073.i386.bundle VMware Workstation 10 for Linux(64位) 发行日期: 2015-05-05 文件大小: 403.18 MB https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1006-LX&productId=362&rPId=8490 下载地址: https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-10.0.6-2700073.x86_64.bundle...

    2023-10-20 资源 368

    栏目推荐

    友情链接 百度收录正常的正规站可申请友情链接! 申请友链

    联系我们

    在线咨询:点击这里给我发消息

    微信号:a0668678

    工作日:9:00-23:00,节假日休息

    扫码关注