首页 > 其他分享 >kubeadm 部署 k8s

kubeadm 部署 k8s

时间:2023-10-17 16:34:28浏览次数:49  
标签:kubectl 执行 kubelet 部署 命令 systemctl 172.17 kubeadm k8s

kubeadm 部署 k8s

简介

记录在centos7.6.1810上,使用kubeadm 部署 k8s,部署在三台虚机上,部署版本是1.22.0

虚机信息

使用三台一模一样的虚机,系统版本为 CentOS7.6.1810

安装虚机的ISO是 CentOS-7-x86_64-Minimal-1810.iso

IP分别是172.17.134.134172.17.139.162172.17.140.87

使用172.17.134.134作为主节点master,其他两台作为子节点worker

image-20231016104220798

部署步骤

以下都是使用root账号操作

设置hostname

为所有的虚机设置不同的hostname

在172.17.134.134上执行以下命令

hostnamectl set-hostname k8s-node-134

在172.17.139.162上执行以下命令

hostnamectl set-hostname k8s-node-162

在172.17.140.87上执行以下命令

hostnamectl set-hostname k8s-node-87

修改hosts文件

修改所有虚机的/etc/hosts文件,保证可以使用主机名访问虚机

在所有的虚机上执行以下命令

# 在所有的虚机上执行以下命令
cat >> /etc/hosts << EOF
172.17.134.134 k8s-node-134
172.17.139.162 k8s-node-162
172.17.140.87 k8s-node-87
EOF

关闭防火墙

在所有的虚机上执行以下命令

systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld

时间同步

在所有的虚机上执行以下命令

yum install chrony -y
systemctl start chronyd && systemctl enable chronyd && systemctl status chronyd
chronyc sources

禁用swap分区

在所有的虚机上执行以下命令

swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

关闭selinux

在所有的虚机上执行以下命令

sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0

加载IPVS模块

在所有的虚机上执行以下命令

yum -y install ipset ipvsadm
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
EOF
kernel_version=$(uname -r | cut -d- -f1)
echo $kernel_version

if [ `expr $kernel_version \> 4.19` -eq 1 ];then
        modprobe -- nf_conntrack
    else
        modprobe -- nf_conntrack_ipv4
fi
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

image-20231017142922693

安装docker

在所有的虚机上执行以下命令

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

PS:如果之前有安装过docker,则会报错docker-ce conflicts with 2:docker-1.13.1-209.git7d71120.el7.centos.x86_64,可以参考该链接解决

启动docker

在所有的虚机上执行以下命令

systemctl start docker && systemctl enable docker && systemctl status docker

安装 kubeadm、kubelet、kubectl

在所有的虚机上执行以下命令

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=0
EOF

查看支持的kubeadm版本

#在所有的虚机上执行以下命令
yum list kubeadm --showduplicates | sort -r

查看支持的kubectl版本

#在所有的虚机上执行以下命令
yum list kubectl --showduplicates | sort -r

查看支持的kubelet版本

#在所有的虚机上执行以下命令
yum list kubelet --showduplicates | sort -r

这里打算装1.22.0版本,先查看一下有没有该版本

#在所有的虚机上执行以下命令
yum list kubeadm --showduplicates | sort -r | grep 1.22
yum list kubectl --showduplicates | sort -r | grep 1.22
yum list kubelet --showduplicates | sort -r | grep 1.22

image-20231017145606788

下载1.22.0版本

#在所有的虚机上执行以下命令
yum install -y kubectl-1.22.0-0 kubelet-1.22.0-0 kubeadm-1.22.0-0

启动kubelet服务

#在所有的虚机上执行以下命令
systemctl start kubelet && systemctl enable kubelet && systemctl status kubelet

这里启动必然是失败的,不过不用担心,继续往下就行

手动观测kubelet的服务是这样子的:

  • 启动后,刚看到是启动成功的

  • 过了一会,systemctl status kubelet看到启动是失败的

  • journalctl -u kubelet.service查看失败的原因,原因是没有文件

image-20231017150235447

不用担心kubelet服务状态,继续往下执行就行

初始化master节点

选择172.17.134.134作为master节点

在172.17.134.134上执行以下命令

kubeadm init \
  --pod-network-cidr=10.144.0.0/16 \
  --image-repository registry.aliyuncs.com/google_containers

image-20231017150958512

运行成功后,会输出启动集群和加入集群的命令,如上图

启动集群

在172.17.134.134即master节点上执行以下命令

命令来自于上一步骤kubeadm init的输出

# 在master节点上执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

启动集群后,再次查看kubelet的服务状态,可以看到已经是运行中

systemctl status kubelet.service

image-20231017151309348

初始化worker节点

初始化worker

选择172.17.139.162和172.17.140.87作为worker节点

在172.17.139.162和172.17.140.87上(即worker节点)执行以下命令

命令来自于上一步骤kubeadm init的输出

#在 worker节点上执行以下命令
kubeadm join 172.17.134.134:6443 --token u0i37n.pxvjhh7qvk4czcf9 \
        --discovery-token-ca-cert-hash sha256:c7115e5ac365e000c63d65fa149ff30817f14ec784e66f907725763d38f630b3

image-20231017151931702

验证是否加入成功

在172.17.134.134即master节点上执行以下命令

kubectl get node -o wide

image-20231017152044873

可以看到加入成功了,只是状态还是NotReady

安装网络插件

这里选择安装Calico插件

下载calico.yaml文件

在172.17.134.134即master节点上执行以下命令

#在master节点上执行以下命令
curl -o ./calico.yaml  https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

修改calico.yaml文件

找到原文件中内容如下的部分

# - name: CALICO_IPV4POOL_CIDR
#   value: "192.168.0.0/16"

image-20231017153445818

修改为《初始化master节点》中kubeadm init --pod-network-cidr=10.144.0.0/16... 命令中的10.144.0.0/16

- name: CALICO_IPV4POOL_CIDR
  value: "10.144.0.0/16"

image-20231017153801192

应用calico

在172.17.134.134即master节点上执行以下命令

kubectl apply -f calico.yml

查看calico

在172.17.134.134即master节点上执行以下命令

kubectl get po -A -o wide | grep calico

image-20231017155627562

查看nodes

在172.17.134.134即master节点上执行以下命令

kubectl get nodes -o wide

image-20231017155712080

可以看到nodes均处于ready状态了

查看组件状态

在172.17.134.134即master节点上执行以下命令

 kubectl get cs

image-20231017160152719

矫正scheduler组件

上图可以看到scheduler组件是unhealthy状态

修改/etc/kubernetes/manifests/kube-scheduler.yaml文件,删除- --port=0

image-20231017160824895

删除后

image-20231017160947702

然后重启kubelet服务

systemctl restart kubelet.service && systemctl status kubelet.service

再次查看cs

#在172.17.134.134即master节点上执行以下命令
kubectl get cs

image-20231017161205226

至此,完成部署与安装

kubectl命令自动补全

运行以下命令,可以tab自动补全kubectl命令

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

验证

创建一个pod来验证一下

创建文件pod.yml

apiVersion: v1
kind: Pod
metadata:
  name: pod-pi
spec:
  containers:
    - name: pi
      image: perl:5.34.0
      command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      imagePullPolicy: IfNotPresent
      

apply yaml文件

kubectl apply -f pod.yml

查看pod和获取日志

kubectl get pod
kubectl logs pod-pi

image-20231017162654034

链接

【原创】kubectl get cs显示unhealthy的解决办法 - wuliping - 博客园 (cnblogs.com)

1分钟配置Kubectl命令自动补全功能-腾讯云开发者社区-腾讯云 (tencent.com)

标签:kubectl,执行,kubelet,部署,命令,systemctl,172.17,kubeadm,k8s
From: https://www.cnblogs.com/rainbow-tan/p/17770055.html

相关文章

  • 记录TritonServer部署多模型到多GPU踩坑 | 京东云技术团队
    一、问题是怎么发现的部署chatglm2和llama2到一个4*V100的GPU机器上遇到问题config.pbtxt中设置模型分别在指定gpu上部署实例配置不生效如以下配置为在gpu0上部署本模型,部署count=1个实例,在gpu1上部署本模型,部署count=2个实例instance_group[{count:1kind:KIND_GPU......
  • 记录TritonServer部署多模型到多GPU踩坑 | 京东云技术团队
    一、问题是怎么发现的部署chatglm2和llama2到一个4*V100的GPU机器上遇到问题config.pbtxt中设置模型分别在指定gpu上部署实例配置不生效如以下配置为在gpu0上部署本模型,部署count=1个实例,在gpu1上部署本模型,部署count=2个实例instance\_group\[{count:1kind:KIND\_GPUgpu......
  • 记录TritonServer部署多模型到多GPU踩坑 | 京东云技术团队
    一、问题是怎么发现的部署chatglm2和llama2到一个4*V100的GPU机器上遇到问题config.pbtxt中设置模型分别在指定gpu上部署实例配置不生效如以下配置为在gpu0上部署本模型,部署count=1个实例,在gpu1上部署本模型,部署count=2个实例instance\_group\[{count:1kind:KIND\_GPUgpu......
  • DHorse v1.4.2 发布,基于 k8s 的发布平台
    版本说明优化特性在集群列表增加集群版本;修改Jvm的GC指标名;解决问题解决shell脚本换行符的问题;解决部署历史列表页,环境名展示错误的问题;解决指标收集功能的异常;升级指南升级指南DHorse介绍DHorse是一个简单易用的轻量级的云应用管理平台,不需要理解容器和k8s的概念,......
  • Linux 本地部署私有Stackedit Markdown编辑器远程访问
    StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7kStar!,它支持将Markdown笔记保存到多个仓库,包括Gitee、GitHub和Gitea。此在线笔记工具还提供了一些便捷功能,如拖拽或粘贴上传图片、文件搜索功能,以及可切换为炫酷的暗黑主题,这些功能特别适合那些喜欢使用Markdown来记录......
  • Harbor-私有镜像仓库的安装部署
    Harbor-私有镜像仓库的安装部署仓库的概念也就是用于存储,docker仓库用于存储镜像。镜像构建完成后,很容易可以在宿主机上运行,但是如果要在其他服务器上运行,则需要考虑镜像的分发,存储的问题。公有/私有仓库DockerRegistry有两种形式公开,开放给所有用户,提供给所有用户搜索,拉......
  • 使用yum部署LAMP
    #阿里云默认镜像站https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.b0451b11g6zMTM#查看当前操作系统版本cat/etc/redhat-release#配置网络yum源在阿里云拿到需要的镜像例(centos7)下载到当前机器wget-O/etc/yum.repos.d/CentOS-Base.repohttps://m......
  • 03 K8S API资源对象介绍02(Deployment Service DaemonSet StatefulSet)
    一、API资源对象DeploymentDeploymentYANL示例vimnginx-deploy.yamlapiVersion:apps/v1kind:Deploymentmetadata:labels:app:myngname:ng-deployspec:replicas:2##副本数selector:matchLabels:app:myngtemplate:metadata:......
  • 2023跟我一起学docker-swarm 教程:部署篇「上」
    2023跟我一起学docker-swarm教程:部署篇「上」Swarm模式是用于管理一组Docker守护程序的高级功能。ip规划:Manager:Manager:172.16.95.137Node1:172.16.95.138Node2:172.16.95.1391、manager节点初始化swarmdockerswarminit--advertise-addr172.16.95.137输出:dockerswar......
  • 2023跟我一起学docker-swarm 教程:部署篇「下」
    2023跟我一起学docker-swarm教程:部署篇「下」停止Swarm集群上的一个节点目前我们所有的节点都ACTIVE的状态运行的,master可以将任务分配给任何节点,所以所有的节点都可以接收到任务。很多时候我们需要维护应用的时候,您需要将节点设置为DRAIN可用性。DRAIN状态的节点Maser阻止此类......