- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
因宿主机内核版本限制和垂直伸缩特性的需要,安装的k8s版本为1.25,runtime为containerd,cni为calico.
containerd、kubeadm、kubelet也可以用包管理器来安装,因为不想配repo,也不想校验repo版有哪些区别,所以这几个都是用原生二进制方式安装的.
IP | Hostname | OS Version | Kernel Version | Comment |
---|---|---|---|---|
192.168.0.11 | node1 | centos 7.9 | 3.10 | control panel |
192.168.0.12 | node2 | centos 7.9 | 3.10 | worker node |
192.168.0.13 | node3 | centos 7.9 | 3.10 | worker node |
用到的组件版本信息 。
系统初始化步骤要求每个节点都要操作,一些主机名等信息需要根据实际修改.
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
/etc/hosts
192.168.0.11 node1
192.168.0.12 node2
192.168.0.13 node3
# 临时关闭。永久关闭需要修改 /etc/fstab
swapoff -a
br_netfilter
,下一步配置系统参数会报错。# 添加配置
cat << EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
# 立即装载
modprobe overlay
modprobe br_netfilter
# 检查装载。如果没有输出结果说明没有装载。
lsmod | grep br_netfilter
/etc/sysctl.conf
文件或/etc/sysctl.d/
目录下的文件,添加或修改以下配置。编辑完成后执行sysctl -p
使配置生效。(如果修改的是/etc/sysctl.d
目录下的文件,sysctl -p
需要指定文件名才能生效)net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
runc
组件会有问题# conntrack-tools的版本为1.4.4-4.el7,如果低了可能会导致runc异常
# 如果安装提示缺少依赖,而依赖在centos 7的repo源里没有,可从高版本centos、alma等发行版下载rpm包再安装
yum install -y conntrack-tools
tar xf cri-containerd-cni-1.7.21-linux-amd64.tar.gz -C /
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
/etc/containerd/config.toml
,主要修改container的数据目录,并启用systemd的cgroup# 修改数据存储目录
root = "/home/apps/containerd"
# 对于使用systemd作为init system的linux发行版,官方建议用systemd作为容器cgroup driver
# false改成true
SystemdCgroup = true
systemctl daemon-reload
systemctl start containerd
systemctl enable containerd
# 查看systemd status
systemctl status containerd
# 查看image,正常情况下还没有image
crictl images
# 验证runc是否正常,如果输出有报错,可以参考"系统初始化"的第8步"安装依赖"
runc --version
本节步骤在所有k8s node都要操作。k8s的二进制文件安装包可以从github下载:https://github.com/kubernetes/kubernetes/releases 。
在changelog中找到二进制包的下载链接,下载server binary即可,里面包含了master和node的二进制文件.
PATH
目录下tar xf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin/
find . -type f -perm /u+x -exec cp {} /usr/local/bin/ \;
/usr/lib/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
mkdir -p /usr/lib/systemd/system/kubelet.service.d/
/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/local/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
systemctl enable --now kubelet
创建集群的步骤在control panel节点操作即可.
kubeadm init --help
提示配置初始化参数,比如pause镜像地址,pod ip范围等。kubeadm init --kubernetes-version v1.25.16
如果init报错失败,可以查下containerd和kubelet的日志。失败后可以重置下kubeadm reset 。
systemctl status containerd
journalctl -xeu containerd
systemctl status kubelet
journalctl -xeu kubelet
如果init成功,控制台会输出worker node加入cluster的命令,将这个命令粘贴到worker node执行即可,比如:
kubeadm join 192.168.0.11:6443 --token 123456 \
--discovery-token-ca-cert-hash sha256:123456
init成功后,输出还会提示创建kubeconfig,根据提示操作即可 。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 下载配置文件。下载后可根据需求修改其中的image地址
wget https://docs.projectcalico.org/manifests/calico.yaml
# 部署calico
kubectl apply -f calico.yaml
kubectl get nodes
kubectl get pod -n kube-system
部署完成后,可以起个pod试下能否正常调度 。
# 创建一个pod。nginx需要提前docker pull
kubectl create deployment nginx --image=nginx
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看状态
kubectl get pods,svc
最后此篇关于[kubernetes]使用kubeadm和containerd部署kubernetes的文章就讲到这里了,如果你想了解更多关于[kubernetes]使用kubeadm和containerd部署kubernetes的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!