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

今日发布0 篇文章 | 本站共发布了40篇文章
  • 原始黄金以高品质好驼奶,不断打动消费者

    在当今的消费市场中,人们对于驼奶粉的选择越来越注重品质和健康。而在众多品牌中,原始黄金以其独特的品质和营养价值,成为了消费者们追求健康的首选。 原始黄金深耕品质 探索鲜萃活性营养 原始黄金驼奶粉作为该品牌的明星产品之一,凭借其独特的成分和营养价值受到了消费者的热烈追捧。与传统奶制品相比,驼奶粉具有更加丰富的营养价值,同时对于乳糖不耐受的人群也更加友好。原始黄金驼奶粉不仅口感顺滑、细腻,更具有低过敏、提高防护力的优点,为消费者提供了更加健康的饮品选择。 原始黄金品牌坚持自然健康的产品理念和对健康的追求。致力于从源头抓起,通过甄选优质的原材料,结合先进的现代化生产工艺,为消费者提供更加安全、健康的食品。凭借着多年的品牌信誉和卓越的产品质量,原始黄金已经成为了中国驼奶行业的领军企业之一。 原始黄金不负众望,以好口碑不断斩获荣誉大奖 原始黄金在驼奶行业深耕多年,品牌创立之初即设立研发中心,并坚持投入巨资自主研发,用精英研发团队创新产品品质,将追求极致的精神渗透到设计的每一处细节中。此外,还通过社交媒体、电视广告和线下活动等多种方式向消费者传递品牌理念和健康饮食文化,让更多人了解到原始黄金对于品质和健康的追求。 为了让更多消费者了解并选择原始黄金品牌,品牌更是强势入驻各大电商平台,只为让消费者都可以轻松地购买到原始黄金驼奶粉等明星产品。而原始黄金也不负众望,凭借卓越的产品品质、突出的创新研发能力以及良好的市场口碑,受到众多消费者的肯定,在激烈的竞争中脱颖而出,连续2年蝉联全国销量第一。同时以万里挑一的高品质,被推选为“国货之光”,荣获新华网《了不起的国货》栏目重点推荐。 ‘4鲜’核心驼奶技术,只为缔造高品质驼奶 原始黄金驼奶粉更是品牌的代表性产品之一,企业自身也一直在不断追求创新和进步。在生产过程中,采用了先进的加工工艺‘4鲜”核心技术’,保留了驼奶中的营养成分和天然活性物质,确保产品品质和营养价值。此外,还针对不同消费人群推出了不同规格和口感的驼奶粉产品,以满足不同消费者的需求。而原始黄金更是以此核心技术荣获“第106届巴拿马万国博览会金奖”,该奖项被誉为工业届的“奥斯卡”。 多元化产品体系 满足人群多样化健康需求 除了驼奶粉之外,原始黄金还积极拓展产品线。目前,已经推出了多种不同类型和功效的食品,如胶原蛋白女性奶粉、儿童成长奶粉、驼奶益生菌等一系列产品。这些产品同样采用了优质的原料和精湛的工艺,为消费者提供了更多健康选择。 未来,原始黄金将继续秉持“为健康而选择”的品牌理念,不断创新和发展。将继续深化对大自然的探索和研究,为消费者带来更多优质的食品和饮品。同时,也将继续拓展国内外市场,与各界合作伙伴共同推动健康产业的发展壮大。相信在不久的将来,原始黄金必将成为全球消费者信赖的健康食品品牌! ...

    2023-12-05 杂记 75
  • K8S工作节点运行kubectl命令报错的原因及解决办法

    K8S工作节点运行kubectl命令报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?。 原因分析: 这是因为kubectl命令需要使用kubernetes-admin来运行,而工作节点上如果没有配置好相关的权限是无法执行的。可以用kubectl config view 命令查看,如下图 可以看出节点2上是没有权限执行的。 解决办法: 1、将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点1相同目录下。如图 2、回到工作节点1上配置环境变量: echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 如图: 3、加载配置信息, source ~/.bash_profile 4、查验是否正常执行kubectl命令. ...

    2023-11-25 技术 287
  • Kubernetes 常用命令汇总

    # 通过文件名或标准输入创建资源。 kubectl create   # 读取指定文件内容,进行创建。(配置文件可指定json,yaml文件)。   kubectl create -f 配置文件   # 创建指定文件内容,创建并指定服务版本。(配置文件可指定json,yaml文件)。   kubectl create -f 配置文件 --edit --output-version=版本号 -o json # 将一个资源公开为一个新的Kubernetes服务,暴露服务。 kubectl expose   # 创建Kubernetes 资源类型,并添加暴露端口。   kubectl expose 资源类型 资源名称 --port=暴露端口 --target-port=容器端口   # 创建Kubernetes service 服务,并添加暴露端口。   kubectl expose service 资源名称 --port=暴露端口 --target-port=容器端口 --name=创建服务名称   # 创建Kubernetes ,并添加UDP暴露端口,使用默认容器端口。   kubectl expose 资源类型 资源名称 --port=暴露端口 --protocol=udp --name=创建服务名称   # 创建Kubernetes服务,根据yaml文件,并添加暴露端口。(配置文件可指定json,yaml文件)。   kubectl expose -f 配置文件 --port=暴露端口 --target-port=容器端口 # 创建并运行一个特定的镜像,可能是副本。创建一个deployment或job管理创建的容器。 kubectl run   # 创建一个镜像,运行。   kubectl run 容器名 --image=镜像名   # 创建一个镜像,运行。并启用暴露端口。   kubectl run 容器名 --image=镜像名 --port=暴露端口   # 创建一个镜像,运行。并引入变量。   kubectl run 容器名 --image=镜像名 --env=“变量”   # 创建一个镜像,运行。并引入标签。   kubectl run 容器名 --image=镜像名 --labels="key=value,env=prod"   # 创建一个镜像,运行。并设置副本数。默认1。   kubectl run 容器名 --image=镜像名 --replicas=副本数   # 创建一个镜像,运行。并添加-i-t访问容器终端。并设置重启策略(Never不重启)。   kubectl run -i -t 容器名 --image=镜像名 --restart=重启策略   # 创建一个镜像,运行。并指定容器内执行指定命令。   kubectl run 容器名 --image=镜像名 --command -- 指定命令 删 # 通过文件名、标准输入、资源名称或标签选择器来删除资源 kubectl delete   # 删除指定资源。   kubectl delete 资源类型 资源名   # 删除所有指定资源。   kubectl delete 资源类型 -all   # 通过指定文件删除指定资源。(配置文件.json .yaml)   kubectl delete -f 配置文件 # 维护期间排除容器名 kubectl drain   # 排除指定容器名。   kubectl drain 容器名 改 # 配置应用资源。修改现有应用程序资源。 kubectl set   # 更新pod内的环境变量。   kubectl set env 资源类型 资源名称 添加变量=值   # 更新pod镜像。   kubectl set image 资源类型 资源名称 容器名=升级镜像版本   # 更新pod内的资源。   kubectl set resources 资源类型 资源名称 [请求——限制= & =请求][选项]   # 通过配置文件更新pod内的资源。(配置文件.json .yaml)   kubectl set resources -f 配置文件 # 使用默认的编辑器编辑一个资源。 kubectl edit   # 动态更新服务配置参数。   kubectl edit 资源类型 资源名称 # 管理资源的发布。 kubectl rollout   # 回滚到上一个版本。   kubectl rollout undo 资源类型 资源名称   # 指定版本回滚。   kubectl rollout undo 资源类型 资源名称 --to-revision=3   # 查看当前的资源状态。   kubectl rollout status 资源类型 资源名称   # 查看历史修订版本   kubectl rollout history 资源类型 资源名称   # 查看指定历史修订版本   kubectl rollout history 资源类型 资源名称 --revision=版本数 # 执行指定复制控制的滚动更新。 kubectl rolling-update   # 滚动更新v1版本,通过json配置文件跟新到v2版本。   kubectl rolling-update 服务名称-v1 -f 服务名称-v2.json   # 滚动更新v1版本,到v2,并指定更新镜像。   kubectl rolling-update 服务名称-v1 服务名称-v2 --image=image:v2 # 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job kubectl scale   # 扩容缩容副本数。   kubectl scale --replicas=副本数 资源类型 资源名称   # 扩容缩容副本数。对多个资源扩容。   kubectl scale --replicas=副本数 资源类型/资源名称1 资源类型/资源名称2   # 扩容缩容副本数。如果当前副本数为N个就扩容为Y个。   kubectl scale --current-replicas=副本数N --replicas=副本数Y 资源类型 资源名称 # 创建一个自动选择扩容或缩容并设置Pod数量 kubectl autoscale   # 设置该资源类型的副本数自动扩容到相关值   kubectl autoscale 资源类型 资源名称 --min=最小值 --max=最大值   # 设置该资源类型的副本数自动扩容到相关值。并根据CPU阈值扩容缩容。   kubectl autoscale 资源类型 资源名称 --max=最大值 --最小值 --cpu-percent=80 # 修改证书资源。 kubectl certificate # 标记节点不可调度 kubectl cordon   # 标记指定节点不可调度   kubectl cordon 节点名 # 标记节点可调度 kubectl uncordon   # 标记指定节点可调度   kubectl uncordon 节点名 # 更新一个或多个节点上的nodes。 kubectl taint # 执行命令到容器。 kubectl exec   # 执行指定命令到容器中。   kubectl exec 容器名 命令   # 分配伪终端已宿主级向容器添加命令。   kubectl exec 容器名 -- bash -c “命令”   # 进入指定节点容器内。   kubectl exec 容器名 -it bash # 转发一个或多个本地端口到一个pod。 kubectl port-forward   # 将宿主级端口转发到容器中。   kubectl port-forward 容器名 宿主级端口:容器端口 # 为kubernetes API Server启动服务代理 kubectl proxy # 拷贝文件或目录到容器中。 kubectl cp # 附加到一个进程到一个已经运行的容器。 kubectl attach   # 进入到一个运行的容器终端。   kubectl attach 容器名 # 通过文件名或标准输入对资源应用配置 kubectl apply # 更新部署配置文件信息(配置文件格式.json .yaml) kubectl apply -f 配置文件 # 使用补丁修改、更新资源的字段。 kubectl patch # 通过文件名或标准输入替换一个资源。 kubectl replace   # 重新创建配置文件内的资源 。配置文件可是(.yaml、.json)   kubectl replace -f 配置文件 --force # 不同的API版本之间转换配置文件。YAML和JSON格式都接受。 kubectl convert # 更新资源上的标签 kubectl label # 在一个或多个资源上更新注释。 kubectl annotate # 修改kubeconfig文件(用于访问API,比如配置认证信息) kubectl config 查 # 显示一个或多个资源 kubectl get   # 查看组件运行状态   kubectl get componentstatus   # 查看节点加入信息   kubectl get node   # 查看所有资源   kubectl get all   # 查看pods状态   kubectl get pods   # 查看pods及运行节点位置,查看更多信息   kubectl get pods -o wide # 查看pods下其他命名空间(kube-system等) kubectl get pods -n 命名空间   # 查看endpoints节点   kubectl get endpoints   # 查看sservice暴露宿主级访问地址描述信息   kubectl get service   # 根据标签查找资源描述信息。--output=wide查看更多信息。   kubectl get 资源类型 --selector="key=value" --output=wide   # 查看资源所有标签   kubectl get 资源类型 --show-labels   # 根据标签查看资源   kubectl get 资源类型 -l app=example   # 查看指定命名空间的资源   kubectl get 资源类型 --namespace=kube-system # 查看命名空间 kubectl get ns # 文档参考资料,可查看yaml文件字段指令含义。 kubectl explain   # 获得资源的特定字段的文档   kubectl explain pods.spec.containers   # 获得资源及其字段的文档   kubectl explain pods # 显示集群信息 kubectl cluster-info   # 显示详细集群信息   kubectl cluster-info dump # 显示资源(CPU/Memory/Storage)使用。需要Heapster运行。 kubectl top # 显示特定资源或资源组的详细信。 kubectl describe   # 查看资源详细信息   kubectl describe 资源类型 资源名称   # 指定标签。详细信息。   kubectl describe 资源类型 -l name=标签名 # 查看node资源使用详情信息 kubectl describe nodes NodeIP # 在od或指定的资源中容器打印日志。如果od只有一个容器,容器名称是可选的。 kubectl logs   # 查看指定节点服务日志。   kubectl logs 容器名   # 查看指定容器日志。   kubectl logs pod 节点名 -c 容器名   # 查看指定容器日志。实时查看。   kubectl logs pod 容器名 -f   # 通过标签查看容器日志   kubectl logs -l key=value 其他 # 检查认证授权 kubectl auth # 用于实现kubectl工具自动补全 kubectl completion # 执行实现自动补全动作 source <(kubectl completion bash) # 打印受支持的API版本 kubectl api-versions # 所有命令帮助。 kubectl help # 运行一个命令行插件。 kubectl plugin # 打印客户端和服务版本信息 kubectl version kubernetes官网 https://kubernetes.io/ kubernetes官方文档其他命令 https://v1-8.docs.kubernetes.io/docs/reference/generated/kubectl/kubectl-commands...

    2023-11-24 技术 138
  • ubuntu 安装k8s

    在vmware创建3台虚拟机,配置,4g/2vCPU/30G,ubuntu系统:Ubuntu 20.04.6。 实验环境规划: 两台机器: 192.168.40.101是k8s控制节点 192.168.40.103是k8s工作节点 1、修改主机名 控制节点:hostnamectl set-hostname umaster1 &&bash nodea节点:hostnamectl set-hostname unode1 &&bash 2、更新apt源及安装基础软件包 控制节点:root@umaster1:~# apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg2 node节点:root@unode1:~# apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg2 把下载的key添加到本地trusted数据库中 控制节点:、root@umaster1:~# curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - OK node节点: curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - OK 3、配置同步时间 4、设置计划同步crontab root@umaster1:~# apt install cron #安装crontab服务 Reading package lists... Done Building dependency tree Reading state information... Done cron is already the newest version (3.0pl1-136ubuntu1). cron set to manually installed. The following packages were automatically installed and are no longer required: gir1.2-goa-1.0 libfwupdplugin1 libxmlb1 Use 'apt autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. root@umaster1:~# service cron start #启动crontab进程 root@umaster1:~# systemctl enable cron --now #设置随机启动 Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron root@umaster1:~# crontab -e 创建计划任务, no crontab for root - using an empty one crontab: installing new crontab root@umaster1:~# crontab -l #查看配置 * */1 * * * /usb/sbin/ntpdate cn.pool.ntp.org #每一小时同步一次 node节点可同步执行相同命令。 4、关闭防火墙和交换分区 1)查看防火墙,其中防火墙状态是active则表明防火墙是开启状态,而inactive则是关闭状态。 : 关闭防火墙执行命令:sudo ufw disable 2)关闭交换分区:执行命令:sudo swapoff -a 5、允许 iptables 检查桥接流量(所有节点) 1.加载overlay和br_netfilter两个内核模块 sudo modprobe overlay && sudo modprobe br_netfilter 持久化加载上述两个模块,避免重启失效。 2、修改内核参数,确保二层的网桥在转发包时也会被iptables的FORWARD规则所过滤. root@umaster1:~# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_foword = 1 EOF 6、设置稳定版仓库 所有节点执行命令:root@umaster1:~# add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable" 7、安装Docker 所有节点执行安装命令: root@umaster1:~# apt-get install docker-ce docker-ce-cli containerd.io -y root@unode1:~# apt-get install docker-ce docker-ce-cli containerd.io -y 8、配置Docker驱动 1、root@umaster1:~#cat <<EOF | tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF 然后执行以下操作: mkdir -pv /etc/systemd/system/docker.service.d #创建docker服务进程 systemctl daemon-reload #加载配置文件 systemctl restart docker #重启docker systemctl enable docker --now #设置docer随机启动 如下图 生产节点node1也执行相同的操作,也可以同步进行。 检查docker是否正常 9、安装k8s 控制节点操作命令: 1):apt-get update && apt-get install -y apt-transport-https curl #升级并安装依赖包 2):新增国内科大的软件源 cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main EOF # 3)执行更新:apt-get update 如果遇到以下报错, 可以通过以下方法解决: 执行命令: apt-key adv --recv-keys --keyserver keyserver.ubuntu.com +报错缺少的key 如上图的报错解决:执行命令:root@umaster1:~# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05 执行安装k8s命令:安装kubelet,kubectl,kubeadm: 1)、root@umaster1:~# apt-get install -y kubelet=1.23.1-00 kubeadm=1.23.1-00 kubectl=1.23.1-00 2)、关闭k8s自动更新:root@umaster1:~# apt-mark hold kubelet kubeadm kubectl  3)、初始化k8s 执行以下命令: kubeadm init --apiserver-advertise-address 192.168.10.102 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification 执行成功后有如下图示: 4)、创建用户操作 root@umaster1:~# mkdir -p $HOME/.kube root@umaster1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config root@umaster1:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config 5)、工作节点加入集群: kubeadm join 192.168.40.100:6443 --token u5jbsc.l3ya2fomnogcc68p \ --discovery-token-ca-cert-hash sha256:407c9c1d46a2a865ff46120be41d49d56d9aea310b8a35a56724b60f17a6449f 6)、...

    2023-11-22 技术 112
  • Ubuntu安装后开启终端端口22,远程连接

    1、打开终端窗口,执行:ifconfig 命令,如果提示没有些服务或者报错,说明没有安装net-tools工具。 执行安装命令:sudo apt install net-tools -y 2、查看需要开启的端口是否被占用 查询命令:netstat -lntp|grep 22 小注: -n 不以进程的服务名称,以编号port number显示 -t 列出tcp网络封包的信息 -l 列出目前正在网络监听listen服务 -p 列出该网络服务的进程 如果发现没有22端口进程,则执行如下命令 sudo apt-get install openssh-server sudo apt-get install ufw sudo ufw enable sudo ufw allow 22 3、最后能xshell连接是否成功,如果还不行请检查服务器防火墙是否开启端口,像阿里云,腾讯云等都需要在把端口打开才可以的。...

    2023-11-20 技术 297
  • k8s新增用户并授权其可查看所有名称空间的pod的权限

    本文记录了在k8s里新增用户并授权其可查看所有名称空间的pod的权限,当用户用此账号登陆后在k8s就只有查看Pods权限功能,而不能删除或者创建功能。 一、ssl认证 生成一个证书 (1)生成一个私钥 进入目录:cd /etc/kubernetes/pki/ 执行命令:(umask 077; openssl genrsa -out hiboy.key 2048) (2)生成一个证书请求 openssl req -new -key hiboy.key -out hiboy.csr -subj "/CN=hiboy" (3)生成一个证书 openssl x509 -req -in hiboy.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out hiboy.crt -days 3650 二、在k8s里新增加一个用户账号:hiboy (1)把hiboy这个用户添加到kubernetes集群中,可以用来认证apiserver的连接 [root@ctdmaster1 pki]# kubectl config set-credentials hiboy --client-certificate=./hiboy.crt --client-key=./hiboy.key --embed-certs=true (2)在kubeconfig下新增加一个hiboy账号context信息 kubectl config set-context hiboy@kubernetes --cluster=kubernetes --user=hiboy (3)创建一个集群角色(clusterrole) [root@ctdmaster1 ~]# vim hiboy-clusterrole.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: hiboy-get-pod rules: apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] [root@ctdmaster1]# kubectl apply -f hiboy-clusterrole.yaml (4)创建一个clusterrolebinding [root@ctdmaster1]# kubectl create clusterrolebinding hiboy-get-pods --clusterrole=hiboy-get-pod --user=hiboy 三、账号信息配置 1、在系统添加一个hiboy的普通用户 useradd hiboy #新增系统用户 hiboy passwd hiboy #设置hiboy登陆密码(hi135246) [root@ctdmaster1 ~]# useradd hiboy [root@ctdmaster1 ~]# passwd hiboy 更改用户 hiboy 的密码 。 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 2、调整修改账号配置信息(不要直接修改root/.kube/config的信息,不然K8s会问题) 复制一份k8s配置信息:cp -ar /root/.kube /tmp/ 修改/tmp/.kube/config文件,把kubernetes-admin和其他账号相关删除,只留hiboy用户 并把current-context变成如下:current-context: hiboy@kubernetes 3、把配置信息复制到hiboy目录下 cp -ar /tmp/.kube/ /home/hiboy/ chown -R hiboy.hiboy /home/hiboy/ 4、切换账号测试 su - hiboy kubectl get pods kubectl get pods -n kube-system 由上图可以,如果是新用户到hiboy登陆系统可以直接查到k8s里所有的pods信息,但是并不具备其他功能,如果需要其他权限也可以采取相类似的操作进行。...

    2023-11-18 技术 398
  • DaemonSet学习

    DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有新节点加入集群时, 会为他们新增一个DaemonSet的Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 daemonset的控制器会监听kuberntes的daemonset对象、pod对象、node对象,这些被监听的对象之变动,就会触发syncLoop循环让kubernetes集群朝着daemonset对象描述的状态进行演进 Daemonset典型的应用场景 在集群的每个节点上运行存储,比如:glusterd 或 ceph。 在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat等。 在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd等。 DaemonSet使用案例:部署日志收集组件fluentd 把fluentd-2-5-1.tar.gz上传到ctdmaster1和ctdnode1和ctdnode2上,解压 [root@ctdmaster1 ds]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz [root@ctdnode1 ~]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz [root@ctdnode2 ~]# ctr -n=k8s.io images import fluentd_2_5_1.tar.gz 创建yaml资源配置文件 [root@ctdmaster1 ds]# vim daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system labels: k8s-app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: name: fluentd labels: name: fluentd-elasticsearch spec: tolerations: - key: node-role.kubernetes.io/master # effect: NoSchedule - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule containers: - name: fluentd-elasticsearch image: xianchao/fluentd:v2.5.1 imagePullPolicy: IfNotPresent resources: limits: memory: 200Mi requests: cpu: '1' memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers 保存退出,执行: [root@ctdmaster1 ds]# kubectl apply -f daemonset.yaml ...

    2023-11-16 技术 126
  • k8s存储类:storageclass

    storageclass,存储类,是K8s工程师为了解决PV和PVC绑定的复杂繁琐问题,提供自动的PV策略机制,不同的存储类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。 存储类的作用就是创建PV的模板,而k8s集群管理员通过创建storageclass就可以动态生成一个存储卷pv供k8s pvc使用。 每个 StorageClass 都包含 provisioner、parameters 和 reclaimPolicy 字段, 这些字段会在 StorageClass 需要动态制备 PersistentVolume 时会使用到。 StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数。 StorageClass配置主要定义以下两部分: 1、PV的属性 ,比如存储的大小、类型等; 2、创建这种PV需要使用到的存储插件,比如Ceph、NFS等.. StorageClass的字段 [root@ctdmaster1 sfs]# kubectl explain storageclass KIND: StorageClass VERSION: storage.k8s.io/v1 DESCRIPTION: StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned. StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name. FIELDS: allowVolumeExpansion allowedTopologies <[]Object> apiVersion kind metadata mountOptions <[]string> parameters <map[string]string> provisioner -required- reclaimPolicy volumeBindingMode provisioner:供应商,storageclass需要有一个供应者,用来确定我们使用什么样的存储来创建pv,常见的provisioner如下 (https://kubernetes.io/zh/docs/concepts/storage/storage-classes/): provisioner既可以由内部供应商提供,也可以由外部供应商提供,以NFS为例,要想使用NFS,我们需要一个nfs-client的自动装载程序,称之为provisioner,这个程序会使用我们已经配置好的NFS服务器自动创建持久卷,也就是自动帮我们创建PV。 安装nfs provisioner,用于配合存储类动态生成pv 把nfs-subdir-external-provisioner.tar.gz上传到node1和node2,手动解压。 ctr -n=k8s.io images import nfs-subdir-external-provisioner.tar.gz 1、创建SA账号 [root@ctdmaster1 storageclass]# vim serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata: name: nfs-provisioner 2、对SA账号授权 3、安装配置provisioner程序 1)创建挂载目录: [root@ctdmaster1 storageclass]# mkdir /data/nfs_pro -pv 2)、修改nfs挂载目录 3)、创建配置文件 [root@ctdmaster1 storageclass]# vim nfs-deployment.yaml kind: Deployment apiVersion: apps/v1 metadata: name: nfs-provisioner spec: selector: matchLabels: app: nfs-provisioner replicas: 1 strategy: type: Recreate template: metadata: labels: app: nfs-provisioner spec: serviceAccount: nfs-provisioner containers: name: nfs-provisioner image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0 imagePullPolicy: IfNotPresent volumeMounts: name: nfs-client-root mountPath: /persistentvolumes env: name: PROVISIONER_NAME value: example.com/nfs name: NFS_SERVER value: 192.168.40.160 name: NFS_PATH value: /data/nfs_pro volumes: name: nfs-client-root nfs: server: 192.168.40.160 path: /data/nfs_pro 4)、执行更新provisioner配置 [root@ctdmaster1 storageclass]# kubectl apply -f nfs-deployment.yaml deployment.apps/nfs-provisioner created 5)、检查安装是否正常启动 4、 4.1创建storageclass,动态供给PV [root@ctdmaster1 storageclass]# vim nfs-storageclass.yaml [root@ctdmaster1 storageclass]# kubectl apply -f nfs-storageclass.yaml storageclass.storage.k8s.io/nfs created 4.2检查是否执行成功 [root@ctdmaster1 storageclass]# kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs example.com/nfs Delete Immediate false 5 创建pvc,通过storageclass动态生成pv...

    2023-11-15 未分类 92
  • K8s的持久化存储学习

    为什么要做持久化存储? 因为在k8s中部署的应用都是以pod容器的形式运行的,假如部署MySQL、Redis等数据库也在pod里,需要对这些数据库产生的数据做备份。但是因为Pod是有生命周期的,如果Pod出现问题或者不小心被删除,往往会导致这些数据会随之消失,所以考虑到数据的安全以及长久的保留,就要考虑pod数据做持久化存储。 K8s支持哪些存储 K8s支持的存储对象是非常多的,我们可以通过命令查看: kubectl explain pods.epec.volumes|grep Object 可以看得出,只要是网络上存的基本要都支持,但是比较常用的也就以下几种: 1、emptyDir 2、hostPath 3、nfs 4、persistentVolumeClaim(PVC) 4、glusterfs 5、cephfs 6、configMap 7、secret 当然如果你有能力也可以自己开发新的存储方案。 如何在K8s使用存储卷 一般来说在K8s中想要使用存储卷,需要经历如下步骤 1)、定义pod的volume,这个volume指明它要关联到哪个存储上的 2)、在容器中要使用volumemounts挂载对应的存储 emptyDir emptyDir类型的Volume是在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。 hostPath hostPath Volume是指Pod挂载宿主机上的目录或文件。 hostPath Volume使得容器可以使用宿主机的文件系统进行存储,hostpath(宿主机路径):节点级别的存储卷,在pod被删除,这个存储卷还是存在的,不会被删除,所以只要同一个pod被调度到同一个节点上来,在pod被删除重新被调度到这个节点之后,对应的数据依然是存在的。 hostpath存储卷缺点:单节点,pod删除之后重新创建必须调度到同一个node节点,数据才不会丢失。 NFS NFS,中文名网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样,用得较多的一种存储类型。 Kubernetes 1.28 不包含 awsElasticBlockStore 卷类型 Kubernetes 1.28 不包含 azureDisk Kubernetes v1.21 已弃用 Kubernetes 1.28 不包含 cinder 卷类型。 Kubernetes v1.17 已弃用gcePersistentDisk gitRepo 卷类型已经被废弃 portworxVolume Kubernetes v1.25已弃用 Kubernetes v1.28 RBD CSI deprecated vsphereVolume(已弃用) flexVolume(已弃用)Kubernetes v1.23 [deprecated]...

    2023-11-07 技术 168
  • 创建Service资源(CLUSTER ip类型)实例记录

    准备工作: 把实验镜像包nginx.tar.gz上传到分节点ctdnode1和ctdnode2上,并导入镜像 节点1: [root@ctdnode1 ~]# ctr -n=k8s.io images import nginx.tar.gz 节点2: [root@ctdnode2 ~]# ctr -n=k8s.io images import nginx.tar.gz 1、创建后端pod资源(使用准备好的nginx镜像) 1)编写yaml文件: 控制节点:[root@ctdmaster1 svc]# vim pod_test.yaml 代码如下: apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 startupProbe: periodSeconds: 5 initialDelaySeconds: 60 timeoutSeconds: 10 httpGet: scheme: HTTP port: 80 path: / livenessProbe: periodSeconds: 5 initialDelaySeconds: 60 timeoutSeconds: 10 httpGet: scheme: HTTP port: 80 path: / readinessProbe: periodSeconds: 5 initialDelaySeconds: 60 timeoutSeconds: 10 httpGet: scheme: HTTP port: 80 path: / 2)执行命令运行pod资源: 控制节点: [root@ctdmaster1 svc]# kubectl apply -f pod_test.yaml 3)、查看运行情况:kubectl get pods -l run=my-nginx -o wide 4)请求Pod资源测试 目前 Pod资源的应用已经运行起来,但是仅限于集群内,外部无法访问,这里就需要创建Service资源作代理,将外部的访问请求转发到Pod上。(需要注意的是,pod虽然定义了容器端口,但是不会使用调度到该节点上的80端口,也不会使用任何特定的NAT规则去路由流量到Pod上。 这意味着可以在同一个节点上运行多个 Pod,使用相同的容器端口,并且可以从集群中任何其他的Pod或节点上使用IP的方式访问到它们。) 2、创建service,做一个好代理。 service的工作主要是通过endpoint与selector协同工作实现,由selector选择出pod的ip地址和端口号,然后记录在endpoint中,当有请求访问到service的ip地址时,就会从endpoint中选择出一个ip地址和端口号,然后将请求重定向至对应的pod中,具体会把请求代理到哪个pod,那就是kube-proxy的轮询来实现的。 service不会直接到pod,service是直接到endpoint资源,就是地址加端口,再由endpoint再关联到pod。 1)创建Service资源yaml文件, 控制节点:[root@ctdmaster1 svc]# vim service_test.yaml apiVersion: v1 kind: Service metadata: name: my-nginx labels: run: my-nginx spec: type: ClusterIP ports: - port: 80 protocol: TCP targetPort: 80 selector: run: my-nginx 我们创建一个 Service,具有标签run=my-nginx的Pod,目标TCP端口 80,并且开放一个抽象的Service端口(targetPort:容器接收流量的端口;port:抽象的 Service 端口,可以使任何其它 Pod访问该 Service 的端口) 2)、保存退出生,运行Service资源, [root@ctdmaster1 svc]# kubectl apply -f service_test.yaml 3)、查看运行情况:[root@ctdmaster1 svc]# kubectl get svc -l run=my-nginx Service资源已经运行正常,集群IP地址是:10.97.128.70 4)、请求Service,测试结果:curl 10.97.128.70 由上图可以看到,访问Service的IP请求到的资源跟之前请求pod节点上的资源,得到的结果是一样的。 我们测试下,删除一个pod资源,请求Service看看访问结果有没有变。如下图: 注意:上面的10.97.128.70:80地址只能是在集群(因为定义的是CLUSTER-IP类型)内部可以访问,在外部还是无法访问,也就是想要通过浏览器访问,那么是访问不通的,如果想要在k8s集群之外访问,是需要把service type类型改成nodePort。 最后,有关Service域名 其实Service只要创建完成,我们就可以直接解析它的服务名,每一个服务创建完成后都会在集群dns中动态添加一个资源记录,添加完成后我们就可以解析了,资源记录格式是: SVC_NAME.NS_NAME.DOMAIN.LTD. 服务名.命名空间.域名后缀 集群默认的域名后缀是svc.cluster.local. 就像我们上面创建的my-nginx这个服务,它的完整名称解析就是 my-nginx.default.svc.cluster.local 这个记录好像只有pod内部可以访问,外部无法访问。 大家思考下,是不是这样呢?...

    2023-11-06 技术 150

    栏目推荐

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

    联系我们

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

    微信号:a0668678

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

    扫码关注