通过containerd部署k8s集群环境及初始化时部分报错解决

目录

一.基础环境配置(每个节点都做)

1.hosts解析

2.防火墙和selinux

3.安装基本软件并配置时间同步

4.禁用swap分区

5.更改内核参数

6.配置ipvs

7.k8s下载

(1)配置镜像下载相关软件

(2)配置kubelet上的cgroup

二.下载containerd(每个节点都做)

1.下载基本软件

2.添加软件仓库信息

3.更改docker-ce.repo文件

4.下载containerd并初始化配置

5.更改containerd上的cgroup

6.修改镜像源为阿里

7.配置crictl并拉取镜像验证

三.master节点初始化(只在master做)

1.生成并修改配置文件

2.查看/etc/containerd/config.toml 内的image地址是否已经加载为阿里的地址

3.查看所需镜像并拉取

4.初始化

(1)通过生成的kubeadm.yml文件进行初始化

(2)注意一个报错:

(3)初始化后需要执行的操作

四.node节点加入master

1.根据master初始化成功后的命令进行加入

2.node1/node2加入

3.在master上查看

4.注意报错

(1)/etc/kubernetes下那些文件已存在,一般是由于已经加入过master,可以将其目录下的内容删除,或者使用reset进行重置

(2)端口占用问题尝试将占用进程杀掉

五.安装网络插件(master做,node选做)

1.获取并修改文件

2.应用该文件并进行查看验证

六.配置kubectl命令补全


192.168.2.190master
192.168.2.191node2-191.com
192.168.2.193node4-193.com

 

一.基础环境配置(每个节点都做)

1.hosts解析

[root@master ~]# tail -3 /etc/hosts
192.168.2.190 master
192.168.2.191 node2-191.com
192.168.2.193 node4-193.com

2.防火墙和selinux

[root@master ~]# systemctl status firewalld.service;getenforce 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
Disabled
#临时
systemctl stop firewalld
setenforce 0
#禁用
systemctl disable firewalld
sed -i '/^SELINUX=/ c SELINUX=disabled' /etc/selinux/config

3.安装基本软件并配置时间同步

[root@master ~]# yum install -y wget tree bash-completion lrzsz psmisc net-tools vim chrony
[root@master ~]# vim /etc/chrony.conf
:3,6 s/^/#      #注释掉原有行
server ntp1.aliyun.com iburst
[root@node1-190 ~]# systemctl restart chronyd
[root@node1-190 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 120.25.115.20                 2   8   341   431   -357us[ -771us] +/-   20ms

4.禁用swap分区

[root@master ~]# swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab && free -m
              total        used        free      shared  buff/cache   available
Mem:          10376         943        8875          11         557        9178
Swap:             0           0           0

5.更改内核参数

[root@node1-190 ~]# cat >> /etc/sysctl.conf << EOF
vm.swappiness=0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@node1-190 ~]# modprobe br_netfilter &&  modprobe overlay && sysctl -p
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

6.配置ipvs

[root@node1-190 ~]# yum install ipset ipvsadm -y
[root@node1-190 ~]# cat <<EOF >  /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
# 为脚本文件添加执行权限并运行,验证是否加载成功
[root@node1-190 ~]# chmod +x /etc/sysconfig/modules/ipvs.modules && /bin/bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4      15053  2 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  7 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

7.k8s下载

(1)配置镜像下载相关软件

[root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
​
[root@master ~]# yum install -y kubeadm kubelet kubectl 
[root@master ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2", GitCommit:"89a4ea3e1e4ddd7f7572286090359983e0387b2f", GitTreeState:"clean", BuildDate:"2023-09-13T09:34:32Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}

(2)配置kubelet上的cgroup

[root@master ~]# cat <<EOF > /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
[root@master ~]# systemctl start kubelet
[root@master ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

二.下载containerd(每个节点都做)

1.下载基本软件

[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

2.添加软件仓库信息

[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.更改docker-ce.repo文件

[root@master ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

4.下载containerd并初始化配置

[root@master ~]# yum install -y containerd
[root@master ~]# containerd config default | tee /etc/containerd/config.toml

5.更改containerd上的cgroup

[root@master ~]# sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml

6.修改镜像源为阿里

[root@master ~]# sed -i "s#registry.k8s.io#registry.aliyuncs.com/google_containers#g" /etc/containerd/config.toml

7.配置crictl并拉取镜像验证

[root@master ~]# crictl --version
crictl version v1.26.0
​
[root@master ~]# cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
​
[root@master ~]# systemctl daemon-reload && systemctl start containerd && systemctl enable containerd
Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.
[root@master ~]# crictl pull nginx
Image is up to date for sha256:61395b4c586da2b9b3b7ca903ea6a448e6783dfdd7f768ff2c1a0f3360aaba99
[root@master ~]# crictl images
IMAGE                     TAG                 IMAGE ID            SIZE
docker.io/library/nginx   latest              61395b4c586da       70.5MB

三.master节点初始化(只在master做)

1.生成并修改配置文件

[root@master ~]# kubeadm config print init-defaults > kubeadm.yml
[root@master ~]# ll
total 8
-rw-r--r--  1 root root    0 Jul 23 09:59 abc
-rw-------. 1 root root 1386 Jul 23 09:02 anaconda-ks.cfg
-rw-r--r--  1 root root  807 Sep 27 16:18 kubeadm.yml
[root@master ~]# vim kubeadm.yml 

advertiseAddress修改为自己master主机的IP

criSocket就使用默认的containerd

name修改为自己master主机的名称

imageRepository修改为阿里的地址registry.aliyuncs.com/google_containers

KubenetesVersion修改为你下载的真实版本

a68031a20bec4a93a7d64284514d7312.png

2.查看/etc/containerd/config.toml 内的image地址是否已经加载为阿里的地址

[root@master ~]# vim /etc/containerd/config.toml 
[root@master ~]# systemctl restart containerd

2358c47c5839416ba78613a7c2d24f06.png

3.查看所需镜像并拉取

[root@master ~]# kubeadm config images list --config kubeadm.yml
​
[root@master ~]# kubeadm config images pull --config kubeadm.yml
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.28.2
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.9
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.9-0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.10.1

4.初始化

(1)通过生成的kubeadm.yml文件进行初始化

[root@master ~]#  kubeadm init --config=kubeadm.yml --upload-certs --v=6
​
......
Your Kubernetes control-plane has initialized successfully!
​
To start using your cluster, you need to run the following as a regular user:
​
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
​
Alternatively, if you are the root user, you can run:
​
  export KUBECONFIG=/etc/kubernetes/admin.conf
​
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
​
Then you can join any number of worker nodes by running the following on each as root:
​
kubeadm join 192.168.2.190:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:0dbb20609e31e4fe7d8ec76f07e6efd1f56965c5f8aa5d5ae5f1d6e9e958ffbe 

(2)注意一个报错:

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist

解决

#编辑此文件并写入内容后重载配置
[root@master ~]# vim /etc/sysctl.conf
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

[root@master ~]# sysctl -p

(3)初始化后需要执行的操作

#master节点若是普通用户
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
#master节点若是root用户
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf

四.node节点加入master

1.根据master初始化成功后的命令进行加入

#后续可以通过kubeadm token create --print-join-command再获取
kubeadm join 192.168.2.190:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:0dbb20609e31e4fe7d8ec76f07e6efd1f56965c5f8aa5d5ae5f1d6e9e958ffbe 

2.node1/node2加入

[root@node2-191 ~]# kubeadm join 192.168.2.190:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:3e56e3aa62b5835b6ed0d16832a4a13d1154ec09fe9c4f82bff9eaaaee2755c2
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
​
This node has joined the cluster:
​
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
​
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
​
​
​
[root@node4-193 ~]# kubeadm join 192.168.2.190:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:3e56e3aa62b5835b6ed0d16832a4a13d1154ec09fe9c4f82bff9eaaaee2755c2
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
​
This node has joined the cluster:
​
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
​
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

3.在master上查看

[root@master ~]# kubectl get nodes
NAME            STATUS   ROLES           AGE     VERSION
master          Ready    control-plane   7m32s   v1.28.2
node2-191.com   Ready    <none>          54s     v1.28.2
node4-193.com   Ready    <none>          11s     v1.28.2

4.注意报错

e260172f2f6b4a71ad8087ac1672a840.png

解决: 

(1)/etc/kubernetes下那些文件已存在,一般是由于已经加入过master,可以将其目录下的内容删除,或者使用reset进行重置

[root@node4-193 ~]# rm -rf /etc/kubernetes/*
# 或
[root@node4-193 ~]# kubeadm reset

(2)端口占用问题尝试将占用进程杀掉

五.安装网络插件(master做,node选做)

1.获取并修改文件

链接:https://pan.baidu.com/s/1Ji5J8ClXVCl9oL-ViKeyWQ 
提取码:310p

[root@master ~]# wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml
[root@master ~]# vim calico.yaml 

(1)找到CLUSTER_TYPE那行,添加后两行,ens33处填写你自己的网卡名称

- name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"

62ff38e8fb44464099c0d4e6820ce2aa.png

(2)取消注释这部分并修改地址

- name: CALICO_IPV4POOL_CIDR
  value: 10.244.0.0/16"

 b3d62965684a46c8b1bd105fbbf4713b.png

2.应用该文件并进行查看验证

[root@master ~]# kubectl apply -f calico.yaml 
[root@master ~]# kubectl get pods -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-658d97c59c-k27lr   1/1     Running   0          18s
kube-system   calico-node-bzq6k                          1/1     Running   0          18s
kube-system   calico-node-dcb9c                          1/1     Running   0          18s
kube-system   calico-node-v97ll                          1/1     Running   0          18s
kube-system   coredns-66f779496c-nfxfr                   1/1     Running   0          4m9s
kube-system   coredns-66f779496c-q8s6j                   1/1     Running   0          4m9s
kube-system   etcd-k8s-master                            1/1     Running   12         4m16s
kube-system   kube-apiserver-k8s-master                  1/1     Running   12         4m16s
kube-system   kube-controller-manager-k8s-master         1/1     Running   13         4m16s
kube-system   kube-proxy-7gsls                           1/1     Running   0          4m10s
kube-system   kube-proxy-szdqz                           1/1     Running   0          2m54s
kube-system   kube-proxy-wgrpb                           1/1     Running   0          2m58s
kube-system   kube-scheduler-k8s-master                  1/1     Running   13         4m16s

六.配置kubectl命令补全

[root@k8s-master ~]#  yum install -y bash-completion
[root@k8s-master ~]# source /usr/share/bash-completion/bash_completion
[root@k8s-master ~]# source <(kubectl completion bash)
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Docker和Kubernetes是目前非常流行的容器化技术,可以帮助开发人员更好的构建、管理和部署应用程序。下面将介绍如何在一台主机上搭建Docker和Kubernetes集群环境,并部署分布式应用程序。 第一步是安装Docker和Kubernetes,安装方式根据不同的操作系统会略有不同。安装完成后,需要对Docker进行一些配置,让它可以将Docker镜像推送和拉取到Kubernetes集群中。这一步可以通过配置Docker的daemon.json文件来完成。 接下来,需要搭建Kubernetes集群。首先需要安装etcd,它是Kubernetes的数据存储后端。然后安装kubectl命令行工具,用于管理Kubernetes集群部署Kubernetes集群后,需要将应用程序打包成Docker镜像,并推送到Docker镜像仓库中。然后,通过编写Kubernetes的YAML文件来定义应用程序的部署方式、服务、副本等信息。最后,使用kubectl apply命令来将YAML文件应用到Kubernetes集群中,实现应用程序的部署和运行。 如果需要对应用程序进行扩容,可以通过kubectl scale命令来水平扩展副本数。如果需要对应用程序进行升级,可以通过修改YAML文件并使用kubectl apply命令来实现。 总之,通过搭建Docker和Kubernetes集群环境,我们可以更轻松、高效的构建、管理和部署分布式应用程序。 ### 回答2: Docker 和 Kubernetes 都是一些颇为流行的容器技术。Docker 以其轻量级和易于部署的特点受到许多人的青睐,而 Kubernetes 则是以其在容器编排和自动化部署上的能力而闻名。本文将介绍如何搭建 Docker 和 Kubernetes 集群环境,并演示如何在分布式应用程序上部署这些技术。 Docker 集群环境: 要搭建 Docker 集群环境,我们需要一个主节点和多个工作节点。可以在机器上安装 Docker 和 Docker Compose。使用 Docker Compose,我们可以轻松创建、启动和停止应用程序,同便于管理容器。 当我们有多个 Docker 容器的候,可以将它们放在不同的宿主机上,从而构建一个 Docker 集群。整个集群可以共享一个网络,这样我们就可以在不同的容器间通信。集群中每个节点都可以运行一个容器。这使得我们可以轻易地扩大我们的应用程序,并将它们部署到不同的机器上。 Kubernetes 集群环境: 要搭建 Kubernetes 集群环境,我们首先需要一个主节点和多个工作节点。要安装 Kubernetes 集群,我们可以使用 kubeadm 安装工具。Kubeadm 是一个命令行工具,它可以管理 Kubernetes 集群中的所有节点和服务。 在 Kubernetes 中,我们定义一组容器和服务,并将其称为一个应用程序,这个应用程序可以轻松地在 Kubernetes 集群部署Kubernetes 集群还提供了各种管理工具,可以监视应用程序的运行状态并处理故障。 分布式应用部署: 在分布式应用中,Docker 和 Kubernetes 都能够提供强大的支持。使用 Docker,我们可以打包我们的应用程序并将其部署到多个容器中。这样我们就可以轻松地扩大我们的应用程序,并将它们部署到不同的机器上。 使用 Kubernetes,我们可以轻松部署和管理分布式应用程序,同可以自动地监视、管理和扩展我们的容器。我们可以定义一个 Kubernetes 应用程序对象,该对象将包含我们的容器化应用程序所需的所有配置和信息。 总的来说,Docker 和 Kubernetes 都是非常流行的容器技术,它们能够提供强大的支持,以便我们轻松地部署和管理我们的应用程序。无论你是在单个容器中运行应用程序,还是在整个集群中运行应用程序,这些技术都可以为你节省大量的间和精力。 ### 回答3: Docker和Kubernetes(简称k8s)是两个广泛应用于容器化解决方案的开源工具。Docker和k8s的联合使用可以提供一个完整的,高度可靠和高度可扩展的容器平台,以便于分布式应用的部署和维护。在本文中,我们将探讨如何在Docker和k8s上搭建集群环境及分布式应用部署方案。 首先我们需要安装和配置好Docker和k8s环境,确保Docker和k8s能够正常工作。假设我们需要在三台机器上部署应用,我们需要在每台机器上安装Docker和k8s,每个Docker节点都要配置k8s本地存储,以保证数据的持久性和多副本数据备份。然后,我们需要在每个Kubernetes节点上部署一个Pod网络,使不同节点上的容器能够相互通信。 然后,我们需要编写Kubernetes 部署清单文件,并将它们发布到 Kubernetes 集群中。清单文件中应包含有关应用程序的必要配置信息,例如应用程序的容器镜像、环境变量、端口号、挂载点和资源请求/限制。我们可以使用Deployment,StatefulSet和DaemonSet三种资源类型来管理应用程序的部署和维护。使用这些资源类型可以实现高可靠性,自动化和灵活性的分布式应用部署和管理。 最后,我们可以使用Kubernetes的服务发现机制来暴露应用程序的服务,以便其他容器或服务可以访问它。这可以通过创建一个Kubernetes的service对象,并将其与应用程序的Pods关联起来来实现。Service对象可以提供一个常量的IP地址和DNS名称来代表应用程序的服务,并确保在容器出现故障仍然可用。 综上所述,Docker和k8s组合可以提供一个强大的容器化解决方案,以及高度可靠和高度可扩展的平台来部署和维护分布式应用程式。在实践中,通过使用Docker和k8s,我们可以更轻松地部署,运行和管理复杂的应用程序,同提高生产力和应用程序的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树下一少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值