• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

云原生:k8sKubeadm搭建K8S

武飞扬头像
叶言灬
帮助1

目录

一、部署步骤

二、实验环境

 1、所有节点,关闭防火墙规则,关闭selinux,关闭swap交换

2、修改主机名,并写入三台服务器的host中

 3、调整内核参数

 4、所有节点安装Docker

 5、所有节点配置K8S源

6、所有节点安装kubeadm,kubelet和kubectl

 7、部署 kubernetes Master 节点(master 节点上执行)

 8、token制作

 9、k8s-node 节点加入 master 节点(两个 node 执行)

10、master节点安装部署pod网络插件(flannel)

 11、给node节点添加标签

12、master检查

 13、再次查询服务是否正常

14、测试K8s集群,在集群中创建pod,验证是否能正常运行


一、部署步骤

在所有节点上安装Dcoker和kubeadm

部署Kubernetes Master

部署Kubernetes Node,将节点加入Kubernetes集群中

部署Dashboard Web页面,可视化查看Kubernetes资源

二、实验环境

服务器类型 IP地址
master 192.168.127.130
node01 192.168.127.140
node02 192.168.127.150

 1、所有节点,关闭防火墙规则,关闭selinux,关闭swap交换

  1.  
    #所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
  2.  
    systemctl stop firewalld
  3.  
    systemctl disable firewalld
  4.  
    setenforce 0
  5.  
    iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
  6.  
    swapoff -a #交换分区必须要关闭
  7.  
    sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
  8.  
    free -g #查看

这里只用一台机子做展示

学新通

2、修改主机名,并写入三台服务器的host中

  1.  
    cat >> /etc/hosts << EOF
  2.  
    192.168.109.11 master
  3.  
    192.168.109.12 node01
  4.  
    192.168.109.13 node02
  5.  
    EOF

学新通

学新通

学新通

 3、调整内核参数

将桥接的 IPV4 流量传递到 iptables 链

  1.  
    #调整内核参数
  2.  
     
  3.  
    cat > /etc/sysctl.d/kubernetes.conf << EOF
  4.  
    #开启网桥模式,可将网桥的流量传递给iptables链
  5.  
    net.bridge.bridge-nf-call-ip6tables=1
  6.  
    net.bridge.bridge-nf-call-iptables=1
  7.  
    #关闭ipv6协议
  8.  
    net.ipv6.conf.all.disable_ipv6=1
  9.  
    net.ipv4.ip_forward=1
  10.  
    EOF
  11.  
     
  12.  
    #加载参数
  13.  
    sysctl --system

同样所有节点都要操作

学新通

 4、所有节点安装Docker

  1.  
    yum install -y yum-utils device-mapper-persistent-data lvm2
  2.  
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3.  
    yum install -y docker-ce docker-ce-cli containerd.io
  4.  
     
  5.  
    mkdir /etc/docker
  6.  
    cat > /etc/docker/daemon.json <<EOF
  7.  
    {
  8.  
    "exec-opts": ["native.cgroupdriver=systemd"],
  9.  
    "log-driver": "json-file",
  10.  
    "log-opts": {
  11.  
    "max-size": "100m"
  12.  
    }
  13.  
    }
  14.  
    EOF
  15.  
    #使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
  16.  
    #日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
  17.  
     
  18.  
    systemctl daemon-reload
  19.  
    systemctl restart docker.service
  20.  
    systemctl enable docker.service
  21.  
     
  22.  
    docker info | grep "Cgroup Driver"
  23.  
    Cgroup Driver: system
学新通

学新通

学新通

 这里仅用一台机子做展示

学新通

 5、所有节点配置K8S源

  1.  
    #定义kubernetes源
  2.  
    cat > /etc/yum.repos.d/kubernetes.repo << EOF
  3.  
    [kubernetes]
  4.  
    name=Kubernetes
  5.  
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  6.  
    enabled=1
  7.  
    gpgcheck=0
  8.  
    repo_gpgcheck=0
  9.  
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  10.  
    EOF

学新通

6、所有节点安装kubeadm,kubelet和kubectl

  1.  
    yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3
  2.  
     
  3.  
    #开机自启kubelet
  4.  
    systemctl enable kubelet.service
  5.  
    systemctl start kubelet
  6.  
    #K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

学新通

学新通

 7、部署 kubernetes Master 节点(master 节点上执行)

  1.  
    kubeadm init \
  2.  
    --apiserver-advertise-address=192.168.109.11 \
  3.  
    --image-repository registry.aliyuncs.com/谷歌_containers \
  4.  
    --kubernetes-version v1.21.3 \
  5.  
    --service-cidr=10.96.0.0/12 \
  6.  
    --pod-network-cidr=10.244.0.0/16

参数说明

  1.  
    kubeadm init \
  2.  
    --apiserver-advertise-address=10.0.0.116 \         #指定master监听的地址,修改为自己的master地址
  3.  
    --image-repository registry.aliyuncs.com/谷歌_containers \   #指定为aliyun的下载源,最好用国内的
  4.  
    --kubernetes-version v1.18.0 \                 #指定k8s版本,1.18.0版本比较稳定
  5.  
    --service-cidr=10.96.0.0/12 \                  #设置集群内部的网络
  6.  
    --pod-network-cidr=10.244.0.0/16                #设置pod的网络
  7.  
    # service-cidr 和 pod-network-cidr 最好就用这个,不然需要修改后面的 kube-flannel.yaml 文件

学新通

学新通

 执行以下命令可使用kubectl管理工具

学新通

 8、token制作

node 节点加入集群需要生成的 token,token 有效期为 24 小时,过期需要重新创建
创建命令为

kubeadm token create --print-join-command

学新通

 9、k8s-node 节点加入 master 节点(两个 node 执行)

  1.  
    获取前面创建好的token令牌
  2.  
    kubeadm join 192.168.127.130:6443 --token ha0ff0.97fy3ct6e1wuic5p --discovery-token-ca-cert-hash sha256:34d027bbe915253bfe2011362c124badbb0cceccbfec08a6a94d579387b3a018

学新通

学新通

学新通

节点显示NotReady状态,需要安装网络插件

token 过期重新生成 token
kubeadm token create --print-join-command

10、master节点安装部署pod网络插件(flannel)

  1.  
    #github仓库下载
  2.  
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  3.  
    #国内站点下载证书
  4.  
    wget http://120.78.77.38/file/kube-flannel.yaml

学新通

学新通

  1.  
    #安装
  2.  
    kubectl apply -f kube-flannel.yml

学新通

kubectl get node      #查看node状态

学新通

kubectl get pods -A

学新通

学新通

 11、给node节点添加标签

  1.  
    kubectl label node node1 node-role.kubernetes.io/node=node1
  2.  
    kubectl label node node2 node-role.kubernetes.io/node=node2
  3.  
    #获取节点信息
  4.  
    kubectl get nodes

学新通

12、master检查

  1.  
    #查询master是否正常
  2.  
    kubectl get cs
  3.  
    #若为unhealthy
  4.  
    vim /etc/kubernetes/manifests/kube-scheduler.yaml
  5.  
    vim /etc/kubernetes/manifests/kube-controller-manager.yaml
  6.  
    #将- --port=0注释掉

学新通

学新通

学新通

 13、再次查询服务是否正常

  1.  
    #查询所有pod是否正常运行
  2.  
    kubectl get pods -A
  3.  
    #查询master是否正常
  4.  
    kubectl get cs
  5.  
    #查询node节点是否ready
  6.  
    kubectl get nodes

学新通

14、测试K8s集群,在集群中创建pod,验证是否能正常运行

  1.  
    #部署服务
  2.  
    kubectl create deployment nginx --image=nginx
  3.  
    #暴露端口
  4.  
    kubectl expose deployment nginx --port=80 --type=NodePort
  5.  
    kubectl get pods
  6.  
    kubectl get svc(service)
  7.  
    #删除pod与svc
  8.  
    kubectl delete deploy/nginx
  9.  
    kubectl delete svc/nginx

学新通

 测试一下,master和node都能通过自己的IP的31757端口去访问

学新通

 学新通

 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghcaea
系列文章
更多 icon
同类精品
更多 icon
继续加载