Kubernetes(K8s) —— 部署(保姆级教程)

Kubernetes(K8s) —— 部署(保姆级教程)

Kubernetes 部署

一、k8s中容器的管理方式

在这里插入图片描述

K8S 集群创建方式有3种:

  • centainerd:默认情况下,K8S在创建集群时使用的方式
  • docker:Docker使用的普记录最高,虽然K8S在1.24版本后已经费力了kubelet对docker的支持,但时可以借助 cri-docker方式来实现集群创建
  • cri-o: CRI-O的方式是Kubernetes创建容器最直接的一种方式,在创建集群的时候,需要借助于cri-o插件的方 式来实现Kubernetes集群的创建。
注意:

docker 和cri-o 这两种方式要对kubelet程序的启动参数进行设置

二、k8s 集群部署

1、k8s 环境部署说明

K8S中文官网: https://kubernetes.io/zh-cn/

主机名ip角色
reg.hxd.org192.168.83.200harbor仓库
k8s-master192.168.83.100master,k8s集群控制节点
k8s-node1192.168.83.10worker,k8s集群工作节点
k8s-node2192.168.83.20worker,k8s集群工作节点

2、集群环境初始化

  • 设置静态ip,三种方式
1、[root@ ~]# nmtui 编辑连接 -> ens160 -> 修改内容 -> 确定 -> 返回 -> 退出 [root@ ~]# nmcli c up ens160 # 连接网络[root@ ~]# nmcli c reload # 登录网络连接2、[root@ ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160# Generated by dracut initrdNAME="ens160"DEVICE="ens160"ONBOOT=yes NETBOOT=yes UUID="42fc4d6c-82c6-4cea-b683-1ad03460b5fe"IPV6INIT=yes BOOTPROTO=none IPADDR="192.168.83."# ipNETMASK="255.255.255.0"GATEWAY="192.168.83.2"DNS1="114.114.114.114"TYPE=Ethernet [root@ ~]# nmcli c up ens160 [root@ ~]# nmcli c reload 3、[root@ ~]# nmcli c mod ens160 ipv4.method manual ipv4.address 192.168.83. ipv4.gateway 192.168.83.2 ipv4.dns 114.114.114.114 ipv4.method manual connection.autoconnect yes[root@ ~]# nmcli c up ens160 [root@ ~]# nmcli c reload 
  • 关掉防火墙和SELINUX
[root@ ~]# systemctl disable --now firewalld[root@ ~]# vim /etc/selinux/configSELINUX=disabled 或者 [root@ ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  • master和node禁用swap和配置本地解析
[root@k8s- ~]# systemctl mask swap.target[root@k8s- ~]# swapoff -a[root@k8s- ~]# vim /etc/fstab# 注释swap#/dev/mapper/rhel-swap swap swap defaults 0 0[root@k8s- ~]# vim /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.83.100 k8s-master 192.168.83.10 k8s-node1 192.168.83.20 k8s-node2 192.168.83.200 reg.hxd.org 
  • master和node节点时间同步
[root@k8s- ~]# vim /etc/chrony.conf pool ntp1.aliyun.com iburst # 修改为阿里云的时间同步地址[root@k8s- ~]# systemctl restart chronyd[root@k8s- ~]# chronyc sources -v# 最下面如果是^*,说明时间同步成功 ^* 118.31.40.99 2671 -138ms[ -143ms] +/- 173ms 

3、所有节点安装docker-ce

  • 配置docker仓库
[root@ ~]# vim /etc/yum.repos.d/docker.repo[docker] name =docker baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.5/x86_64/stable/ gpgcheck =0[root@ ~]# dnf install docker-ce -y
  • 所有节点设定docker的资源管理模式为systemd
[root@ ~]# vim /etc/docker/daemon.json{"registry-mirrors":["https://reg.hxd.org"]}[root@ ~]# systemctl enable --now docker

4、配置harbor仓库

  • 生成认证key和证书
# 创建目录[root@reg ~]# mkdir /data/certs/ -p# 生成认证key和证书[root@reg ~]# openssl req -newkey rsa:4096 \ -nodes -sha256 -keyout /data/certs/hxd.org.key \ -addext "subjectAltName = DNS:reg.hxd.org"\ -x509 -days 365 -out /data/certs/hxd.org.crt # 注意创建时,必须写对域名 Common Name (eg, your name or your server's hostname)[]:reg.hxd.org # 查看证书信息[root@reg ~]# openssl x509 -in /data/certs/hxd.org.crt -noout -text
  • 启用docker,并设置开机启动
[root@reg ~]# systemctl enable --now docker
  • 将harbor的证书颁发给其他三个主机
[root@k8s- ~]# mkdir /etc/docker/certs.d/reg.hxd.org/ -p [root@reg ~]# for i in 100 10 20 ; do scp /data/certs/hxd.org.crt [email protected].$i:/etc/docker/certs.d/reg.hxd.org/ca.crt; done 
  • 启用harbor仓库

下载软件包地址

https://github.com/goharbor/harbor/releases

# 上传到harbor仓库主机并解压[root@reg ~]# tar zxf harbor-offline-installer-v2.5.4.tgz -C /opt/# 复制配置文件格式为.yml结尾来启用文件[root@reg ~]# cd /opt/[root@reg opt]# ls containerd harbor [root@reg opt]# cd harbor/[root@reg harbor]# ls common common.sh docker-compose.yml harbor.v2.5.4.tar.gz harbor.yml.tmpl install.sh LICENSE prepare [root@reg harbor]# cp harbor.yml.tmpl harbor.yml# 修改配置文件以下内容[root@reg harbor]# vim harbor.yml hostname: reg.hxd.org certificate: /data/certs/hxd.org.crt private_key: /data/certs/hxd.org.key harbor_admin_password: 123# 安装并启用harbor[root@reg harbor]# ./install.sh --help  Note: Please sethostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients. Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.yml bacause notary must run under https. Please set --with-trivy if needs enable Trivy in Harbor Please set --with-chartmuseum if needs enable Chartmuseum in Harbor [root@reg harbor]# ./install.sh --with-chartmuseum# 在master主机上登陆harbor仓库[root@k8s-master ~]# docker login reg.hxd.org Login Succeeded [root@k8s-master ~]# docker info Cgroup Driver: systemd # 资源管理更改为systemd https://reg.hxd.org/ # 认证harbor仓库
  • 在浏览器上搜索192.168.83.200
在这里插入图片描述
在这里插入图片描述

5、安装K8S部署工具

  • 所有节点部署K8S软件仓库
[root@k8s- ~]# vim /etc/yum.repos.d/k8s.repo[k8s]name=k8s baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm gpgcheck=0
  • 安装软件
# 显示所有版本[root@k8s-master ~]# dnf list kub* --showduplicates# master上安装[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y# node1,node2上安装[root@k8s-node ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 -y

6、在所节点安装cri-docker

  • 安装cri-docker

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker 软件下载: https://github.com/Mirantis/cri-dockerd

# dnf install libcgroup-0.41-19.el8.x86_64.rpm \> cri-dockerd-0.3.14-3.el8.x86_64.rpm -y # 上传k8s-1.30.tar.gz# 上传libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm安装包,并解压[root@k8s-master ~]# dnf install *.rpm -y# 传给node节点[root@k8s-master ~]# scp libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm [email protected]:/root/[root@k8s-master ~]# scp libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm [email protected]:/root/
  • 修改cri-docker配置文件
[root@k8s- ~]# vim /lib/systemd/system/cri-docker.service# 指定网络插件名称及基础容器镜像ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.hxd.org/k8s/pause:3.9 
  • 启用cri-docker
[root@k8s-systemc ~]# systemctl daemon-reload[root@k8s- ~]# systemctl enable --now cri-docker.service# dockerd的套接字文件[root@k8s-master ~]# ll /var/run/cri-dockerd.sock # 默认文件信息# [root@k8s-master ~]# kubeadm config print init-defaults | less

7、在master节点拉取K8S所需镜像

  • 拉取k8s集群所需要的镜像
[root@k8s-master ~]# kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.30.0 \ --cri-socket=unix:///var/run/cri-dockerd.sock [root@k8s-master ~]# docker images | awk '/google/{print $1":"$2}'[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' | awk -F / '{print $3}'[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' | awk -F / '{system("docker tag "$0" reg.hxd.org/k8s/"$3)}'# 在浏览器harbor建立k8s项目选择公开[root@k8s-master ~]# docker images | awk '/hxd/{system("docker push "$1":"$2)}'# 注意拉取到仓库前必须登录仓库[root@k8s-master ~]# docker login reg.hxd.org 用户:admin 密码:123 
在这里插入图片描述

8、集群初始化

  • 启动kubelet服务
# 所有主机[root@k8s- ~]# systemctl enable --now kubelet.service[root@k8s- ~]# systemctl restart kubelet.service
  • 执行初始化
[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \ --image-repository reg.hxd.org/k8s \ --kubernetes-version v1.30.0 \ --cri-socket=unix:///var/run/cri-dockerd.sock # 指定集群配置文件变量(不指定执行kubectl get node会报错)[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  • 给node主机指定这个master令牌
kubeadm join192.168.83.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery token-ca-cert-hash sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --cri-socket=unix:///var/run/cri-dockerd.sock # 当前节点没有就绪,因为还没有安装网络插件,容器没有运行[root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master NotReady control-plane 4m35s v1.30.0 
注意:

在此阶段如果生成的集群token找不到了可以重新生成

9、安装flannel网络插件

官方网站: https://github.com/flannel-io/flannel

  • 安装网咯插件
# 上传下载好的 flannel-0.25.5.tag.gz 和 kube-flannel.yml[root@k8s-master ~]# mkdir network[root@k8s-master ~]# mv flannel-0.25.5.tag.gz kube-flannel.yml network/[root@k8s-master ~]# cd network/[root@k8s-master network]# docker load -i flannel-0.25.5.tag.gz Loaded image: flannel/flannel-cni-plugin:v1.5.1-flannel1 # 在浏览器harbor建立flannel项目选择公开# 给镜像打标签[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.hxd.org/flannel/flannel-cni-plugin:v1.5.1-flannel1# 拉取镜像[root@k8s-master ~]# docker push reg.hxd.org/flannel/flannel-cni-plugin:v1.5.1-flannel1# 给镜像打标签[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.hxd.org/flannel/flannel:v0.25.5# 拉取镜像[root@k8s-master ~]# docker push reg.hxd.org/flannel/flannel:v0.25.5
  • 编辑kube-flannel.yml 修改镜像下载位置
[root@k8s-master ~]# vim kube-flannel.yml image: flannel/flannel:v0.25.5 image: flannel/flannel-cni-plugin:v1.5.1-flannel1 image: flannel/flannel:v0.25.5 
  • 安装flannel网络插件
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml# 查看集群节点[root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 4h13m v1.30.0 k8s-node1 Ready <none> 4h11m v1.30.0 k8s-node2 Ready <none> 4h11m v1.30.0 
注意:

所有阶段的STATUS为Ready状态,那么恭喜你,你的kubernetes就装好了!!

10、测试集群运行情况

  • 建立一个pod
# 上传nginx-latest.tar.gz镜像# 打标签[root@k8s-master ~]# docker tag nginx:latest reg.hxd.org/library/nginx:latest# 拉取到仓库[root@k8s-master ~]# docker push reg.hxd.org/library/nginx:latest# 建立pod[root@k8s-master ~]# kubectl run test --image nginx:latest# 查看pod状态[root@k8s-master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE test1/1 Running 0 4m48s [root@k8s-master ~]# kubectl get pods -o wide  NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test1/1 Running 0 6m38s 10.244.2.2 k8s-node2 <none><none># 查看建立的pos信息[root@k8s-master ~]# kubectl describe pods test Container ID: docker://5c3ac30e03bd991bc9a20aa1ab49a098893b6fbbf03565cedd8e406c33590d0a 容器id Normal Scheduled 9m53s default-scheduler Successfully assigned default/test to k8s-node2 # 删除pod[root@k8s-master ~]# kubectl delete pod test
注意:

node主机删除了建立的pos镜像,也会自动生成

11、设置kubectl命令补齐功能

[root@k8s-master ~]# dnf install bash-completion -y[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc[root@k8s-master ~]# source ~/.bashrc

Read more

苹果最贵手机要来了!折叠屏iPhone将于9月亮相;部分高校严禁校内使用OpenClaw;黄仁勋预言:传统软件和APP或将消失 | 极客头条

苹果最贵手机要来了!折叠屏iPhone将于9月亮相;部分高校严禁校内使用OpenClaw;黄仁勋预言:传统软件和APP或将消失 | 极客头条

「极客头条」—— 技术人员的新闻圈! ZEEKLOG 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。(投稿或寻求报道:[email protected]) 整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 一分钟速览新闻点! * 多所高校要求警惕 OpenClaw 安全风险,部分严禁校内使用 * 荣耀 CEO 李健:荣耀机器人全栈自研,将聚焦消费市场 * 马化腾凌晨 2 点发声:还有一批龙虾系产品陆续赶来 * 前快手语言大模型中心负责人张富峥,已加入智源人工智能研究院,负责 LLM 方向 * 最新全球 AI 应用百强榜发布,豆包/DeepSeek/千问上榜 * 苹果折叠 iPhone 将于九月亮相,融合 iPhone 与 iPad 体验

By Ne0inhk
不止“996”!曝硅谷AI创业圈「极限工作制」:每天16小时、凌晨3点下班、周末也在写代码

不止“996”!曝硅谷AI创业圈「极限工作制」:每天16小时、凌晨3点下班、周末也在写代码

编译 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) “如果你周日去旧金山的咖啡馆,会发现几乎每个人都在工作。” 这是 AI 创业公司 Mythril 联合创始人 Sanju Lokuhitige 最近最直观的感受。去年 11 月,他特地搬到旧金山,只为了更接近 AI 创业浪潮的中心。但很快,他也被卷入了这股浪潮带来的另一面——一种越来越极端的工作文化。 Lokuhitige 坦言,他现在几乎每天工作 12 小时,每周 7 天。除了每周少数几场刻意安排的社交活动(主要是为了和创业者们建立联系),其余时间几乎都在写代码、做产品。 “有时候我整整一天都在编程,”他说,“我基本没有什么工作与生活的平衡。”而这样的生活,在如今的 AI 创业圈里并不算罕见。 旧金山 AI 创业圈的真实日常 一位在旧金山一家 AI

By Ne0inhk
黄仁勋公开发文:传统软件开发模式终结,参与AI不必非得拥有计算机博士学位

黄仁勋公开发文:传统软件开发模式终结,参与AI不必非得拥有计算机博士学位

AI 究竟是什么?在 NVIDIA CEO 黄仁勋看来,它早已不只是聊天机器人或某个大模型,而是一种正在迅速成形的“新型基础设施”。 近日,黄仁勋在英伟达官网发布了一篇长文,提出一个颇具形象的比喻——AI 就像一块“五层蛋糕”。从最底层的能源,到芯片、基础设施、模型,再到最上层的应用,人工智能正在形成一整套完整的产业技术栈,并像电力和互联网一样,逐渐成为现代社会的底层能力。 这也是黄仁勋自 2016 年以来公开发表的第七篇长文。在这篇文章中,他从计算机发展史与第一性原理出发,试图解释 AI 技术栈为何会演化成如今的形态,以及为什么全球正在掀起一场规模空前的 AI 基础设施建设。 在他看来,过去几十年的软件大多是预先编写好的程序:人类设计好算法,计算机按指令执行,数据被结构化存储在数据库中,通过精确查询调用。而 AI 的出现打破了这一模式——计算机开始能够理解图像、文本和声音,并根据上下文实时生成答案、推理结果甚至新的内容。 正因为智能不再是预先写好的代码,而是实时生成的能力,支撑它运行的整个计算体系也必须被重新设计。

By Ne0inhk
猛裁1.6万人后,网站再崩6小时、一周4次重大事故!官方“紧急复盘”:跟裁员无关,也不是AI写代码的锅

猛裁1.6万人后,网站再崩6小时、一周4次重大事故!官方“紧急复盘”:跟裁员无关,也不是AI写代码的锅

整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 过去几年里,科技公司几乎都在同一件事上加速:让 AI 参与写代码。 从自动补全、自动生成函数,到直接修改系统配置,生成式 AI 已经逐渐走进真实生产环境。但最近发生在亚马逊的一连串事故,却给整个行业泼了一盆冷水——当 AI 开始真正参与生产环境开发时,事情可能远比想象复杂。 最近,多家媒体披露,本周二亚马逊内部紧急召开了一场工程“深度复盘(deep dive)”会议,专门讨论最近频繁出现的系统故障——其中,一个被反复提及的关键词是:AI 辅助代码。 一周 4 次严重事故,亚马逊内部紧急复盘 事情的起点,是最近一段时间亚马逊系统稳定性明显下降。 负责亚马逊网站技术架构的高级副总裁 Dave Treadwell 在一封内部邮件中坦言:“各位,正如大家可能已经知道的,最近网站及相关基础设施的可用性确实不太理想。” 为此,公司决定把原本每周例行举行的技术会议

By Ne0inhk