• 【Kubernetes快速实战】


    K8S官网文档:https://kubernetes.io/zh/docs/home/


    前言

    K8S 是Kubernetes的全称,用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统,K8S 是 负责自动化运维管理多个 Docker 程序的集群。


    一、K8S核心特性

    • 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。
    • 存储编排:自动挂载所选存储系统,包括本地存储。
    • Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。
    • 批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。
    • 水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。
    • 自动化上线和回滚:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。
    • 自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性。
    • 自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。

    二、K8S集群安装

    1.安装K8S集群

    搭建K8S集群,准备三台4核8G的虚拟机,操作系统选择用centos 7以上版本,先在三台机器上装好docker。
    在三台机器上都执行如下命令操作:

    1、关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    
    • 1
    • 2

    2、关闭 selinux

    sed ‐i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
    setenforce 0 # 临时关闭
    
    • 1
    • 2

    3、关闭 swap

    swapoff ‐a # 临时关闭
     vim /etc/fstab # 永久关闭
    #注释掉swap这行
    # /dev/mapper/centos‐swap swap swap defaults 0 0
    systemctl reboot #重启生效
    free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4、给三台机器分别设置主机名

    hostnamectl set‐hostname 
    
    • 1

    第一台:k8s‐master
    第二台:k8s‐node1
    第三台:k8s‐node2

    5、在 k8s‐master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip

    cat >> /etc/hosts << EOF
    192.168.160.129 k8s‐master
    192.168.160.130 k8s‐node1
    192.168.160.131 k8s‐node2
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6、将桥接的IPv4流量传递到iptables

    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge‐nf‐call‐ip6tables = 1
    net.bridge.bridge‐nf‐call‐iptables = 1
    EOF
    sysctl ‐‐system # 生效
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7、设置时间同步

    yum install ntpdate ‐y
    ntpdate time.windows.com
    
    • 1
    • 2

    8、添加k8s yum源

    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
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum‐key.gpg
    https://mirrors.aliyun.com/kubernetes/yum/doc/rpm‐package‐key.gpg
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    9、如果之前安装过k8s,先卸载旧版本

    yum remove ‐y kubelet kubeadm kubectl
    
    • 1

    10、查看可以安装的版本

    yum list kubelet ‐‐showduplicates | sort ‐r
    
    • 1

    11、安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群

    yum install ‐y kubelet‐1.18.0 kubeadm‐1.18.0 kubectl‐1.18.0
    
    • 1

    12、开机启动kubelet

    systemctl enable kubelet
    systemctl start kubelet
    
    • 1
    • 2

    13、初始化操作

    在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)

    kubeadm init ‐‐apiserver‐advertise‐address=192.168.65.160 ‐‐image‐repository registry.aliyuncs.com/google_containers ‐‐kubernetes‐version v1.18.0 ‐‐service‐cidr=10.96.0.0/12 ‐‐pod‐network‐cidr=10.244.0.0/16
    
    • 1

    执行完后结果如下图:
    在这里插入图片描述
    在k8s-master机器上执行如下命令:

    #配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令
    mkdir ‐p $HOME/.kube
    sudo cp ‐i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id ‐u):$(id ‐g) $HOME/.kube/config
    
    #查看kubectl是否能正常使用
    kubectl get nodes
    
    #安装 Pod 网络插件
    kubectl apply ‐f https://docs.projectcalico.org/manifests/calico.yaml
    # 如果上面这个calico网络插件安装不成功可以试下下面这个
    # kubectl apply ‐f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在所有k8s node机器执行上图第三个红框里的命令:

     # 将node节点加入进master节点的集群里,复制上图第三个红框里的命令执行
     kubeadm join 192.168.65.160:6443 ‐‐token hbovty.6x82bkdlsk6dfy32 \
     ‐‐discovery‐token‐ca‐cert‐hash sha256:659511b431f276b2a5f47397677b1dff74838ae5eb18e24135e6dae1b8c45840
    
    • 1
    • 2
    • 3

    在k8s-master机器执行查看节点命令

    kubectl get nodes
    
    • 1

    在这里插入图片描述
    刚刚安装的三个k8s节点都已经准备就绪,大功告成!

    2.用K8S部署Nginx

    在k8s-master机器上执行

    # 创建一次deployment部署
    kubectl create deployment nginx ‐‐image=nginx
    kubectl expose deployment nginx ‐‐port=80 ‐‐type=NodePort
    # 查看Nginx的pod和service信息
    kubectl get pod,svc ‐o wide
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述访问Nginx地址: http://任意节点的ip:图中Nginx的对外映射端口,http://192.168.65.160:30433
    在这里插入图片描述
    补充:如果node节点添加进集群失败,可以删除节点重新添加。
    要删除 k8snode1这个节点,首先在 master 节点上依次执行以下两个命令:

    kubectl drain k8s‐node1 ‐‐delete‐local‐data ‐‐force ‐‐ignore‐daemonsets
    kubectl delete node k8s‐node1
    
    • 1
    • 2

    执行后通过 kubectl get node 命令可以看到 k8snode1已被成功删除,接着在 k8snode1这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执行命令添加到集群。

    kubeadm reset
    
    • 1

    三、总结

    提示:以上就是今天要讲的内容,本文仅仅简单介绍了Kubernetes快速搭建,以及用K8S部署Nginx。

  • 相关阅读:
    Nginx配置参数详解一篇到底
    【C++】网络在线五子棋
    composer require下载指定包,同时出现下载其他包
    【Qt之QSplashScreen】开场动画使用:进度条加载及设置鼠标指针不转圈
    Error occurred while trying to proxy request项目突然起不来了
    Mbot ros编译环境安装
    Linux与shell命令行学习
    理解Go中的布尔逻辑
    协议的定制之序列化与反序列化 | 守护进程
    微信店铺小程序开通的效果是什么
  • 原文地址:https://blog.csdn.net/java_wxid/article/details/127967699