• 云原生--k8s一主多从架构搭建


    目录

    一、部署步骤

    二、实验环境

    1.在所有节点上关闭防护墙与核心防护,并且关闭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、查询服务是否正常

    13、测试 k8s 集群,在集群中创建一个 pod,验证是否能正常运行


    一、部署步骤

    在所有节点上安装Docker和kubeadm

    部署Kubernetes Master

    部署容器网络插件

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

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

    二、实验环境

    服务器类型    IP地址

    master    192.168.239.128

    node01   192.168.239.129

    node02   192.168.239.132

    1.在所有节点上关闭防护墙与核心防护,并且关闭swap交换

    1. systemctl stop firewalld
    2. setenforce 0
    3. iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
    4. swapoff -a         #交换分区必须要关闭
    5. sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭swap分区

    2.修改主机名,并写入每台服务器的host文件

    cat >> /etc/hosts << EOF

    192.168.239.128 master

    192.168.239.129 node01

    192.168.239.132 node02

    EOF

    这里我后来将node02改成了192.168.239.132

    3.调整内核参数

    将桥接的ipv4流量传递到iptables

    1. cat > /etc/sysctl.d/kubernetes.conf << EOF
    2. net.bridge.bridge-nf-call-ip6tables=1
    3. net.bridge.bridge-nf-call-iptables=1
    4. net.ipv6.conf.all.disable_ipv6=1
    5. net.ipv4.ip_forward=1
    6. EOF
    7. #加载参数
    8. 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. mkdir /etc/docker
    5. cat > /etc/docker/daemon.json <<EOF
    6. {
    7.   "exec-opts": ["native.cgroupdriver=systemd"],
    8.   "log-driver": "json-file",
    9.   "log-opts": {
    10.     "max-size": "100m"
    11.   }
    12. }
    13. EOF
    14. #使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
    15. #日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
    16. systemctl daemon-reload
    17. systemctl restart docker.service
    18. systemctl enable docker.service
    19. docker info | grep "Cgroup Driver"
    20. 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

    yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3

    #开机自启kubelet

    systemctl enable kubelet.service

    systemctl start kubelet

    #K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

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

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

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

    mkdir -p $HOME/.kube

    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    8、token制作

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

    创建命令为

    kubeadm token create --print-join-command

    1. kubeadm join 192.168.239.128:6443 --token x9vnku.titck6xbu46bhu0l \
    2.   --discovery-token-ca-cert-hash sha256:662060560b511d9d753d5680b1d898465ac07f451d7e814364de4df223c6f252这里需要复制下来的,将来node节点想要加入k8s集群就需要输入token代码

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

    获取前面创建好的token令牌

    kubeadm join 192.168.239.128:6443 --token fav55t.68omf6avhieu04y9 --discovery-token-ca-cert-hash sha256:6adf7f7d26c45c64cbf37eacee55255f34a4ed42443d643191ad6117d8f10287

    但是此处显示无让罗状态,需要安装网络插件

    token 过期重新生成 token命令:

    kubeadm token create --print-join-command

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

    1. 下载插件yaml插件
    2. wget http://120.78.77.38/file/kube-flannel.yaml(国内)
    3. wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml(国外)

    kubectl apply -f kube-flannel.yaml

    1. 如果这里运行不起来的话解决方法:
    2. #修改 flannel 插件文件,这个版本比较低,高版本 k8s 尽量选择一些高一些的版本 flannel
    3. sed -i -r "s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.12.0-amd64#g" kube-flannel.yaml
    4. kubectl apply -f kube-flannel.yaml
    5. kubectl get pods -n kube-system
    6. kubectl get node  #部署好网络插件,node 准备就绪

    这里显示我的coredns运行是失败的,这里表示有一个容器运行的容器为0,如果不解决,节点状态将一直是notready状态解决方法:

    cd /etc/kubernets/

    cd manifests/

    ls

    vim kube-scheduler.yaml

    vim kube-controller-manager.yaml

    kubectl get cs

    发现全部为健康状态

    cd ~(注意这里我的yml文件在家目中)

    ls

    kube apply -f kube-flannel.yml

    全部running

    11、给node节点添加标签

    kubectl label node node01 node-role.kubernetes.io/node=node1

    kubectl label node node02 node-role.kubernetes.io/node=node2

    #获取节点信息

    kubectl get nodes

    12、查询服务是否正常

    监测K8s集群是否正常后,再运行服务部署

    #查询所有pod是否正常运行

    kubectl get pods -A

    #查询master是否正常

    kubectl get cs

    #查询node节点是否ready

    kubectl get nodes

    13、测试 k8s 集群,在集群中创建一个 pod,验证是否能正常运行

    1. #部署服务
    2. kubectl create deployment nginx --image=nginx:1.14
    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

    kubectl delete deploy/nginx

    kubectl delete svc/nginx

    删除pod与svc

  • 相关阅读:
    java 枚举ENUM
    波生发生器的设计仿真图
    CLR C#--计算型异步操作
    日撸java_day66-68
    RabbitMQ真实生产故障问题还原与分析
    【无标题】好消息 突破:IM开源项目OpenIM采用wasm技术实现jssdk
    计算机毕业设计Java机械生产企业办公设备管理系统(源码+系统+mysql数据库+lw文档)
    使用git命令提交代码到gitee码云仓库
    创业项目找什么?
    SQL必需掌握的100个重要知识点:组合查询
  • 原文地址:https://blog.csdn.net/a_b_e_l_/article/details/127639172