首页 > 其他分享 >K8S基础:搭建K8S集群(v1.27.6)

K8S基础:搭建K8S集群(v1.27.6)

时间:2023-11-10 14:35:26浏览次数:39  
标签:-- containerd etc 集群 crictl v1.27 yum docker K8S

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。

准备

节点

主机名

IP

系统&内核

配置

master01

k8s01

10.70.5.190

Centos7.9,Kernel 5.4.259-1.el7.elrepo.x86_64

8c16g100g

node01

k8s02

10.70.5.191

Centos7.9,Kernel 5.4.259-1.el7.elrepo.x86_64

8c16g100g

node02

k8s03

10.70.5.192

Centos7.9,Kernel 5.4.259-1.el7.elrepo.x86_64

8c16g100g

  1. 机器配置
# 关闭 firewalld 防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld
$ setenforce 0
$ sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  # 永久关闭 SELinux


# 临时禁用 swap
$ swapoff -a
$ sed -i '/.*swap.*/d' /etc/fstab  # 永久禁用 swap


# 配置 /etc/hosts
$ cat > /etc/hosts << EOF
10.70.5.190 k8s01
10.70.5.191 k8s02
10.70.5.192 k8s03
EOF


# 配置内核转发 & 网桥过滤
$ 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
vm.swappiness = 0
EOF


# 加载br_netfilter模块
$ modprobe br_netfilter
$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
$ echo 1 > /proc/sys/net/ipv4/ip_forward


# 安装ipset及ipvsadm
$ yum -y install ipset ipvsadm
$ cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
$ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack  # 授权、运行、检查是否加载


# 配置时间同步
$ yum install -y chrony
$ systemctl enable --now chronyd
  1. 安装 & 启动 containerd
$ yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
$ yum install -y yum-utils
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ yum list docker-ce --showduplicates | sort -r
 docker-ce.x86_64    3:24.0.0-1.el8    docker-ce-stable
 docker-ce.x86_64    3:23.0.6-1.el8    docker-ce-stable
 <...>
$ yum install -y containerd.io
$ systemctl enable --now containerd


$ containerd config default > /etc/containerd/config.toml  # 生成默认配置
$ vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"  # 修改为阿里镜像地址
SystemdCgroup = true  # 使用 Cgroup
$ systemctl restart containerd
  1. 安装 crictl & 设置 crictl 连接 containerd
$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.27.1/crictl-v1.27.1-linux-amd64.tar.gz
$ tar -zxvf crictl-v1.27.0-linux-amd64.tar.gz -C /usr/bin/
$ crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock
  1. 配置 K8S 仓库
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  1. 安装 kubeadm 和 kubelet
$ yum install -y kubelet-1.27.6 kubeadm-1.27.6 kubectl-1.27.6
  1. 为了实现 docker 使用的 cgroupdriver 与 kubelet 使用的 cgroup 的一致性,建议修改如下文件内容。
cat <<EOF >  /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
  1. 启动 kubelet
$ systemctl enable --now kubelet

初始化集群(Master节点操作)

$ kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=10.70.5.190 \
--kubernetes-version=v1.27.6 \
--service-cidr=110.10.0.0/16 \
--pod-network-cidr=110.110.0.0/16


$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config


# 查看集群状态
$ kubectl get nodes
NAME    STATUS     ROLES           AGE     VERSION
k8s01   NotReady   control-plane   4m18s   v1.27.6

安装网络插件-Calico(Master节点操作)

集群初始化完成后节点都处于 NotReady 状态,需要安装网络插件,常见网络插件有 Flannel、Calico、Weave等,在此选用 Calico。【扩展学习-K8S网络插件:https://developer.aliyun.com/article/1245323】

$ curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/tigera-operator.yaml
$ kubectl create -f tigera-operator.yaml
$ curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/custom-resources.yaml
$ vim custom-resources.yaml
spec:
  calicoNetwork:
    ipPools:
    - blockSize: 26
      cidr: 110.110.0.0/16  # 此处和 --pod-network-cidr=110.110.0.0/16 保持一致
$ kubectl create -f custom-resources.yaml
$ watch kubectl get pods -n calico-system

此处常见错误 cni plugin not initialized

kubelet "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized"

百思不得解,重启服务器解决!参考下面文档:

结论:"Container runtime network not ready" 错误通常是由于网络配置不正确或网络插件未正确安装等原因引起的,重启节点可能会清理可能导致网络问题的缓存或配置!

添加 node 节点(node节点操作)

$ kubeadm join 10.70.5.190:6443 --token 95fk2q.xixv9p6umea8oa1n \
    --discovery-token-ca-cert-hash sha256:f23cfa147d262484f5060eacd24187849ac648a640709c00349f3437865ef96d
# 以上 token 有过期时间,过期后可使用下面命令重新获取
$ kubeadm token create --print-join-command
    
# 在node节点执行完上面命令后查看集群状态(在 master 节点操作)
$ kubectl get nodes
NAME    STATUS   ROLES           AGE     VERSION
k8s01   Ready    control-plane   6h18m   v1.27.6
k8s02   Ready    <none>          6h14m   v1.27.6
k8s03   Ready    <none>          6h14m   v1.27.6

部署成功!

配置命令自动补全功能

$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ source ~/.bashrc

安装 Dashboard

省略...


扩展:crictl 命令用法

  1. 镜像相关

功能

Docker

Containerd

显示本地镜像

docker images

crictl images

下载镜像

docker pull

crictl pull

上传镜像

docker push


删除本地镜像

docker rmi

crictl rmi

查看镜像详情

docker inspect {image_id}

crictl inspecti {image_id}

  1. 容器相关

功能

Docker

Containerd

显示容器列表

docker ps [-a]

crictl ps

创建容器

docker create

crictl create

启/停容器

docker start/stop

crictl start/stop

删除容器

docker rm [-f]

crictl rm

查看容器详情

docker inspect

crictl inspect

附加容器

docker attach

crictl attach

执行命令

docker exec

crictl exec

查看日志

docker logs

crictl logs

查看容器资源

docker stats

crictl stats

  1. pod 相关

功能

Docker

Containerd

显示 pod 列表


crictl pods

查看 pod 详情


crictl inspectp

运行 pod


crictl runp

停止 pod


crictl stopp

本节完!

标签:--,containerd,etc,集群,crictl,v1.27,yum,docker,K8S
From: https://blog.51cto.com/u_64214/8298828

相关文章

  • 手把手教你在虚拟机中部署Kubernetes集群(K8S)
    我们在上面:VM部署CentOS并且设置网络 部署好了服务器。接下来需要准备三个服务器分别为master节点:master  192.168.171.7node节点:node1  192.168.171.6node节点:node2  192.168.171.4此步骤需要启动三台虚拟机,并且使用xshell进行连接使用执行多个的命令来在每个服务器同步......
  • 使用rancher rke快速安装k8s集群
    概述RancherKubernetesEngine(RKE)是一个用于部署、管理和运行Kubernetes集群的开源工具。旨在简化Kubernetes集群的部署和操作。RKE具有以下特点和功能:简化的部署过程RKE提供了一个简单的命令行界面,使您可以轻松地部署一个完整的Kubernetes集群。您只需提供少量的配置信息,RKE......
  • k8s入门学习
    k8s入门https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/minikube启动集群minikubestart创建实例kubectlcreatedeploymentgin--image=gin_demo:v1会创建相对应的pod和deployment此时服务端口只能内部集群访问端口暴露使用expose将服务端口暴露进行访......
  • Kubernetes常用命令及yml文件、集群网络 Kubernetes组件介绍及环境搭建
    Kubernetes常用命令及yml文件、集群网络Kubernetes组件介绍及环境搭建Kubernetes组件介绍及环境搭建一、kubernetes常用命令说明:因为k8s的命令都是通过kubectl组件接收的,这个组件只在master节点有,所以k8s的命令都是在master节点中执行kubectlgetnodes#查看当前集群中......
  • Oracle集群RAC DG日常检查指令
    目录操作系统进程检查Pmon检查负载检查数据库检查查看数据库打开状态和相关信息查找主库判断集群正常与否判断会话等待查看连接数并与数据库配置对比判断集群和DG状态RACDG操作系统进程检查Pmon检查pmon(ProcessMonitorprocess)用于监控其他后台进程。负责在连接出现异常中止......
  • Redis分片集群
    搭建分片集群主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:●海量数据存储问题●高并发写的问题使用分片集群可以解决.上述问题,分片集群特征:●集群中有多个master,每个master保存不同数据●每个master都可以有多个slave节点●master之间通过ping监测彼......
  • loki采集k8s日志
    前言loki是轻量、易用的日志聚合系统。如果你的k8s集群规模并不大,推荐使用grafana+loki的方案来做微服务日志的采集;Loki组成loki架构很简单,主要由3部分组成:loki:服务端,负责存储日志和处理查询;promtail:采集端,负责采集日志发送给loki;grafana:负责采集日志的展示;promtail.ymlkubectl......
  • k8s通过sidecar模式收集pod的容器日志至ELK
    架构:已完成的部署1、ES集群及kibana部署 https://blog.51cto.com/yht1990/60809812、kafaka+zookeeper集群 https://blog.51cto.com/yht1990/6081518准备sidecar镜像(filebeat)找一台服务器打镜像[root@yw-testfilebeat]#catDockerfileFROMdocker.elastic.co/beats/f......
  • 运行k8s
      这个总算全部都run起来了,记录下要点,如果flannel一直显示crashloopback: ......
  • DHorse(K8S的CICD平台)的实现原理
    综述首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里。在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具,比如jekines,还有一些商业公司推出的自动化构建工具,但他们都不能够很好的......