zoukankan      html  css  js  c++  java
  • centos7.6搭建K8s(Kubernetes)

    基于kubeamd方式部署K8s解决方案

     

     

     

       

    Master:192.168.0.26           node1:192.168.0.191             node2:192.168.0.94

    一、初始化操作

    1、首先关闭三台服务器的防火墙

    systemctl stop firewalld     #永久关闭

    systemctl disable firewalld   #永久关闭

    永久关闭selinux

    sed -i 's/enforcing/disabled/' /etc/selinux/config

    关闭swap分区

    swapoff -a                      #临时

    sed  -ri 's/.*swap.*/#&/' /etc/fstab  #永久关闭

    2、给三台主机添加主机名称方便管理

    hostnamectl set-hostname   ecs-K8s-master

    hostnamectl set-hostname  ecs-K8s-node1

    hostnamectl set-hostname ecs-K8s-node2

    master服务器添加hosts,其他不用添加

    /etc/hosts配置文件中加入你的ip及修改的名字

    192.168.0.26 ecs-K8s-master

    192.168.0.191 ecs-K8s-node1

    192.168.0.94 ecs-K8s-node2

    3、将桥接的IPV4流量传递到iptanles的链

    /etc/sysctl.d/k8s.conf 三台服务器的配置文件加入下面两行。

    net.bridge.bridge-nf-call-ip6tables=1

    net.bridge.bridge-nf-call-iptables=1

    执行如下立即生效

    sysctl  --system

    4、三台服务器同步时间

    yum -y install ntpdate -y

    ntpdate time.windows.com

    二、所有节点的准备工作

    1、所有节点安装docker

    wget -i http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    cp docker-ce.repo /etc/yum.repos.d/

    安装所需软件包

    yum  install -y yum-utils

    yum -y install device-mapper-persistent-data

    yum -y install lvm2

    查看各版本docker

    yum list docker-ce --showduplicates | sort -r

    安装dockers

    yum install docker-ce-18.06.1.ce-3.el7

    配置开机自启动

    systemctl enable docker

    查看是否自启动(enabled)

    systemctl list-unit-files | grep docker

    启动dockers

    systemctl start docker

    2、Docker中的仓库配置(所有节点)

    cat > /etc/docker/daemon.json << EOF
    {
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    EOF

    配置完成需要重启docker

    systemctl restart docker

    3、添加阿里云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

    4、部署kubeadm,kubeletkubectl(所有节点执行)

    由于版本更新频繁,这里指定版本号部署

    rpm --rebuilddb

    yum update

    yum clean all

    yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

    检查是否安装

    rpm -qa | grep kubelet

    rpm -qa | grep kubeadm

    rpm -qa | grep kubectl

    rpm -qa | grep kubernetes-cni

    启动kubelet,并设置开机启动

    systemctl enable kubelet && systemctl start kubelet

    5、初始化master(master上面执行)

    ###apiserver-advertise-address指定masterip地址

    ###pod-network-cidr指定Pod网络的范围,这里使用flannel网络方案

    kubeadm init --kubernetes-version=1.18.0 --apiserver-advertise-address=192.168.0.26 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

    完成后结果如下,不过有两部分需要在master,与node上面执行。

     

    mster执行如下

    6、加入kubernetes node

    执行完成可以使用kubectl get nodes 查看当前节点信息。已经有我们master的节点信息了。

    在所有node节点执行上图的命令,将node节点加入。

    Node1执行

     Node2执行

     master节点执行kubectl get nodes,查看是否两个节点加入。

     7、部署CNI网络插件(在master执行)

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

     kubectl get pods -n kube-system

    查看是否执行完成已经运行

    上面的状态全部为1/1时,使用kubectl get nodes,查看是否是已经就绪

    集群已经搭建完成。

    8、测试kubernetes集群

    kubernetes集群中创建一个pod,验证是否正常运行。

    kubectl create deployment nginx --image=nginx   拉取一个nginx

    kubectl get pod  查看是否拉取完成。Running已经拉取完成

     当状态是running时执行对外进行端口暴露。

    kubectl expose deployment nginx --port=80 --type=NodePort

    kubectl get pod,svc   查看对外的端口

    这边实验是通过华为云服务器测试,需要在云平台的安全组开放这个端口,不然无法访问,如果是虚拟机的话就直接访问就行。

    测试访问masterip加上31667测试可以访问。

     

    测试node1节点的ip加上31667测试也是可以访问。

     

    k8s集群搭建完成

     

    扩展:

    一、yaml文件概述

    k8s集群中对资源管理和资源对象编排部署可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象资源操作编辑到YAML格式文件中,通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署。

    1、语法格式

    *通过缩进表示层级关系

    *不能使用tab进行缩进,只能使用空格

    *一般开头部分两个空格,

    *字符后缩进一个空格,比如冒号,逗号等

    *使用---表示新的yaml文件开始

    *使用#代表注释

    2、字段说明

     3、如何快速编写yaml

    使用已经部署的,或者未部署的,导出模板进行修改达到快速编写yaml

    第一种:使用kubectl  create 命令生成yaml文件,并不直接执行也没有部署,只是生成yaml文件。

    kubectl create deployment web --image=nginx -o yaml --dry-run >my1.yaml

    第二种:使用kubectl  get命令导出yaml文件,已经部署完成项目,在部署好的项目生成yaml文件。

     kubectl get deploy nginx -o=yaml --export >my2.yaml

     

    二、pod基本概念

    1、pod基本概念

    pod是k8s系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s上运行容器化应用的资源对象,其他的资源对象都是用来支撑或扩展pod对象功能的,比如控制器对象是用来管控pod对象的,service或ingress资源对象是用来爆露pod引用对象的,persistentVolume资源对象是用来为pod提供存储等等,k8s不会直接处理容器,而是pod,pod是由一个或多个container组成。

    pod是kubernetes的最重要概念,每一个pod都有一个特殊的被称为“根容器”的pause容器。pause容器对应的镜像属于kubernetes平台的一部分,除了pause容器,每个pod还包含一个或多个紧密相关的用户业务容器。

    (1)最小部署单元

    (2)包含多个容器(一组 容器的集合)

    (3)一个pod中容器共享网络命名空间

    (4)pod是短暂的

    2、pod存在的意义

    (1)创建容器使用docker,一个docker对应是一个容器,一个容器一个进程,一个容器运行一个应用程序

    (2)pod是多进程设计,运行多个应用程序。一个pod有多个容器,一个容器运行一个应用程序。

    (3)pod存在为了亲密性应用,两个应用之间进行交互,网络之间调用,两个应用应该需要频繁调用。

    3、pod实现机制

    共享网络

    通过pause容器,把其他共享存储业务容器加入到pause容器里面,让所有业务容器在同一个名称空间中,可以实现网络共享。

    未完待续

    作者: 阿隆
    不足之处,欢迎技术指导。
  • 相关阅读:
    yii框架_用户登录
    判断变量是否定义
    ajax小结
    yii框架_1
    yii框架_1_简单模型搭建与应用
    Greedy Gift Givers
    C# 音量控制 静音 等
    Fidelity Job Opportunities
    SPSiteDataQuery
    eBooks on html javascript & css
  • 原文地址:https://www.cnblogs.com/sxshaolong/p/14452707.html
Copyright © 2011-2022 走看看