• kubeadm安装k8s集群


    一、环境部署

    服务器类型ip地址
    master20.0.0.55
    node0120.0.0.56
    node0220.0.0.57

    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. for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
    9. #加载ip_vs

     

    2、修改主机名、DNS解析

    1. vim /etc/hosts
    2. 20.0.0.55 master
    3. 20.0.0.56 node01
    4. 20.0.0.57 node02
    5. hostnamectl set-hostname master01
    6. hostnamectl set-hostname node01
    7. hostnamectl set-hostname node02

    3、调整内核参数

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

     

    二、所有节点安装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. "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
    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. systemctl daemon-reload
    18. systemctl restart docker.service
    19. systemctl enable docker.service
    20. docker info | grep "Cgroup Driver"
    21. Cgroup Driver: systemd

    三、安装k8s集群

    1、所有节点配置K8S源,安装kubeadm、kubelet和kubectl

    1. -------------------- 所有节点安装kubeadm,kubelet和kubectl --------------------
    2. //定义kubernetes源
    3. cat > /etc/yum.repos.d/kubernetes.repo << EOF
    4. [kubernetes]
    5. name=Kubernetes
    6. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    7. enabled=1
    8. gpgcheck=0
    9. repo_gpgcheck=0
    10. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    11. EOF
    12. yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
    13. //开机自启kubelet
    14. systemctl enable kubelet.service

    2、部署K8S集群

    master节点操作

    1. kubeadm config images list
    2. #查看初始化需要的镜像
    3. mkdir /opt/k8s/
    4. cd /opt/k8s/
    5. #上传v1.20.11.zip压缩包
    6. unzip v1.20.11.zip -d /opt/k8s
    7. cd /opt/k8s/v1.20.11
    8. for i in $(ls *.tar);do docker load -i $i;done
    9. #使用for循环,将上传的镜像导入到docker中
    10. scp -r /opt/k8s root@node01:/opt
    11. scp -r /opt/k8s root@node02:/opt
    12. #复制镜像和脚本到node节点,并在node节点上执行脚本加载镜像文件。(上面的for循环)

     

     

    3.1 初始化操作(master节点操作) 

    1. kubeadm config print init-defaults > /opt/kubeadm-config.yaml
    2. #打印配置文件重定向到指定文件中
    3. vim /opt/kubeadm-config.yaml
    4. 11 localAPIEndpoint:
    5. 12 advertiseAddress: 20.0.0.55 #指定master节点的IP地址
    6. 13 bindPort: 6443
    7. ......
    8. 34 kubernetesVersion: v1.20.11 #指定kubernetes版本号
    9. 35 networking:
    10. 36 dnsDomain: cluster.local
    11. 37 podSubnet: "10.244.0.0/16" #指定pod网段,10.244.0.0/16用于匹配flannel默认网段
    12. 38 serviceSubnet: 10.96.0.0/12 #指定service网段
    13. 39 scheduler: {}
    14. #末尾再添加以下内容
    15. ---
    16. apiVersion: kubeproxy.config.k8s.io/v1alpha1
    17. kind: KubeProxyConfiguration
    18. mode: ipvs #把默认的kube-proxy调度方式改为ipvs模式
    19. =============================================================
    20. cd /opt
    21. kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
    22. #--upload-certs参数可以在后续执行加入节点时自动分发证书文件
    23. #tee kubeadm-init.log 用以输出日志
    24. less kubeadm-init.log
    25. #查看kubeadm-init.log日志
    26. ls /etc/kubernetes/
    27. #查看kubernetes配置文件目录
    28. ls /etc/kubernetes/pki
    29. #查看存放ca等证书密码的目录

     

     

    3.2 设置kubectl命令(master节点操作)

    kubectl 需经由API server 认证及授权后方能执行相关的管理操作,kubeadm部署的集群为其生成了一个具有管理权限的认证配置文件 :/etc/kubernets/admin.conf ,它可有kubectl通过默认的 “ $HOME/.kube/config” 的路径进行加载。

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

    1. mkdir -p $HOME/.kube
    2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    3. sudo chown $(id -u):$(id -g) $HOME/.kube/config
    4. #授权操作,不然无法使用kubectl命令
    5. kubectl get cs
    6. #查看集群健康状态

     如果 kubectl get cs 发现集群不健康,更改以下两个文件

    1. vim /etc/kubernetes/manifests/kube-scheduler.yaml
    2. vim /etc/kubernetes/manifests/kube-controller-manager.yaml
    3. # 修改如下内容
    4. 把--bind-address=127.0.0.1变成--bind-address=20.0.0.55 #修改成k8s的控制节点master01的ip
    5. 把httpGet:字段下的hosts由127.0.0.1变成20.0.0.55(有两处)
    6. #- --port=0 # 搜索port=0,把这一行注释掉
    7. systemctl restart kubelet
    8. #重启服务
    9. kubectl get cs
    10. #查看集群节点信息

    controllers-manager.yaml 文件同上

     

    4、node节点加入k8s集群

    node01和node02上面都执行

    1. kubeadm join 20.0.0.55:6443 --token abcdef.0123456789abcdef \
    2. --discovery-token-ca-cert-hash sha256:6e06913a9f07388d0873864f0cce4b11c112e43341ddb52d52c2d956e70de08d
    3. #将前面创建好的token令牌,再两台node节点上执行,加入到集群中

     

    master节点获取k8s集群信息 

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

    1. //所有节点部署网络插件flannel
    2. 方法一:
    3. //所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
    4. cd /opt
    5. docker load < flannel.tar
    6. //在 master 节点创建 flannel 资源
    7. kubectl apply -f kube-flannel.yml
    8. 方法二:
    9. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    10. kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
    11. //在 node 节点上执行 kubeadm join 命令加入群集
    12. kubeadm join 192.168.10.19:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
    13. --discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2
    14. //在master节点查看节点状态
    15. kubectl get nodes
    16. kubectl get pods -n kube-system
    17. NAME READY STATUS RESTARTS AGE
    18. coredns-bccdc95cf-c9w6l 1/1 Running 0 71m
    19. coredns-bccdc95cf-nql5j 1/1 Running 0 71m
    20. etcd-master 1/1 Running 0 71m
    21. kube-apiserver-master 1/1 Running 0 70m
    22. kube-controller-manager-master 1/1 Running 0 70m
    23. kube-flannel-ds-amd64-kfhwf 1/1 Running 0 2m53s
    24. kube-flannel-ds-amd64-qkdfh 1/1 Running 0 46m
    25. kube-flannel-ds-amd64-vffxv 1/1 Running 0 2m56s
    26. kube-proxy-558p8 1/1 Running 0 2m53s
    27. kube-proxy-nwd7g 1/1 Running 0 2m56s
    28. kube-proxy-qpz8t 1/1 Running 0 71m
    29. kube-scheduler-master 1/1 Running 0 70m

  • 相关阅读:
    片段与活动的交互
    【wpf】ListView 和 ItemsControl 的一点区别
    电脑无线网络不显示网络列表应该如何解决
    五、Java控制流程
    决策树与随机森林在分类预测中的应用(附源码)
    Linux内核之completion机制
    【JavaScript】关键字function的点滴
    一面数据: Hadoop 迁移云上架构设计与实践
    1011 循环神经网络 RNN
    卡方分布的期望值和方差
  • 原文地址:https://blog.csdn.net/weixin_42054864/article/details/134080613