• K8S 极速入门


    主机安全配置(所有节点)

    关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    
    • 1
    • 2

    确认是否运行

    firewall-cmd --state
    
    • 1

    SELINUX配置
    做出下述修改,一定要重启系统才能生效

    sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
    • 1

    主机时间同步(所有节点)

    yum -y install ntpdate
    
    • 1
    crontab -l 0 */1 * * * ntpdate time1.aliyun.com
    
    • 1

    永久关闭swap分区(所有节点)

    使用kubeadm部署必须关闭swap分区,修改配置文件
    需要重启操作系统。

    vi /etc/fstab
    
    • 1

    在swap文件系统对应的行,行首添加#表示注释。

    添加网桥过滤(所有节点)

    cat /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    vm.swappiness = 0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    加载br_netfilter模块

    modprobe br_netfilter
    
    • 1

    查看是否加载

    lsmod | grep br_netfilter
    
    • 1

    加载网桥过滤配置文件

    sysctl -p /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    vm.swappiness = 0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    开启ipvs(所有节点)

    安装ipset及ipvsadm

    yum -y install ipset ipvsadm
    
    • 1

    在所有节点执行如下脚本

    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    授权、运行、检查是否加载

    chmod 755 /etc/sysconfig/modules/ipvs.modules
    
    • 1
    sh /etc/sysconfig/modules/ipvs.modules
    
    • 1
    lsmod | grep ip_vs_rr
    
    • 1

    在这里插入图片描述

    安装docker-ce(所有节点)

    所有节点安装wget和vim命令

    yum -y install wget vim
    
    • 1

    YUM源设置

    首先去到 /etc/yum.repos.d/ 目录,删除该目录下所有repo文件
    下载centos基础yum源配置(这里用的是阿里云的镜像)

    curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    • 1

    下载docker的yum源配置

    curl -o docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
    
    • 1

    配置kubernetes的yum源

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

    执行下列命令刷新yum源缓存

     yum clean all  
     yum makecache  
     yum repolist
    
    • 1
    • 2
    • 3

    出现下面列表表示yum源配置正确
    在这里插入图片描述

    安装docker

    查看可安装的docker-ce版本

    yum list docker-ce.x86_64 --showduplicates | sort -r
    
    • 1

    在这里插入图片描述
    如果上面这步显示不出来可用的版本,rm -rf /etc/yum.repos.d/docker-ce.repo 删除这个yum源,重新获取,再来一遍

    安装指定版本docker-ce
    此版本不需要修改服务启动文件及iptables默认规则链策略。

    yum -y install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7
    yum -y install containerd.io
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    查看docker-ce是否安装成功

    docker version
    
    • 1

    在这里插入图片描述
    设置开机自启动和启动docker

    systemctl enable docker
    systemctl start docker
    
    • 1
    • 2

    修改docker-ce服务配置文件(所有节点)

    修改其目的是为了后续使用/etc/docker/daemon.json来
    进行更多配置

    vim /usr/lib/systemd/system/docker.service
    
    • 1

    在这里插入图片描述
    新建daemon.json文件

    vim /etc/docker/daemon.json
    
    • 1

    插入下面内容

    {
    	"exec-opts":["native.cgroupdriver=systemd"]
    }
    
    • 1
    • 2
    • 3

    重启docker

    systemctl restart docker
    systemctl restart containerd
    
    • 1
    • 2

    查看是否启动成功

    systemctl status docker
    systemctl status containerd
    
    • 1
    • 2

    在这里插入图片描述

    安装k8s(所有节点)

    yum list | grep kubeadm
    
    • 1

    输入y 回车
    在这里插入图片描述
    如果你上面是单台安装的,只需要将这个yum源scp到worker1和2

    scp /etc/yum.repos.d/kubernetes.repo worker1:/etc/yum.repos.d/
    
    • 1

    这里要输入yes和worker1和2的密码
    在这里插入图片描述
    复制到过去后,需要同样的做验证

    yum list | grep kubeadm
    
    • 1

    输入y 回车
    在这里插入图片描述
    生成 containerd 的默认配置文件

    containerd config default > /etc/containerd/config.toml
    
    • 1

    查看 sandbox 的默认镜像仓库在文件中的第几行

    cat /etc/containerd/config.toml | grep -n "sandbox_image"
    
    • 1

    使用 vim 编辑器 定位到 sandbox_image,将 仓库地址修改成 k8simage/pause:3.6

    vim /etc/containerd/config.toml
    
    • 1

    sandbox_image = " registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"

    重启 containerd 服务

    systemctl daemon-reload
    systemctl restart containerd.service
    
    • 1
    • 2

    安装kubeadm kubelet kubectl

    yum -y install --setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0
    
    • 1

    在这里插入图片描述
    为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。

    vim /etc/sysconfig/kubelet
    
    • 1
    KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
    
    • 1

    设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

    systemctl enable kubelet
    
    • 1
    systemctl status kubelet
    
    • 1

    在这里插入图片描述

    k8s集群容器镜像准备(master)

    查看集群使用的容器镜像

    kubeadm config images list
    
    • 1

    将列表中的文件导入到image.list文件,便于制作脚本

    kubeadm config images list >> image.list
    
    • 1
     vim image.list
    
    • 1
    #!/bin/bash
    img_list='registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.2
    registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.17.2
    registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.17.2
    registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.17.2
    registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
    registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.9-0
    registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.10.1'
    for img in ${img_list}
    do
            docker pull $img
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    sh images.list
    
    • 1
    docker images
    
    • 1

    在这里插入图片描述

    scp传输pause和kube-proxy两个镜像到worker节点

    docker save -o kube-proxy.tar registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy
    docker save -o pause.tar registry.cn-hangzhou.aliyuncs.com/google_containers/pause
    
    • 1
    • 2

    在这里插入图片描述

    scp kube-proxy.tar pause.tar worker1:/root
    scp kube-proxy.tar pause.tar worker2:/root
    
    • 1
    • 2

    在这里插入图片描述
    在worker节点 load 镜像

    docker load -i kube-proxy.tar
    docker load -i pause.tar
    
    • 1
    • 2

    在这里插入图片描述

    初始化k8s集群

    在master节点执行,10.244.0.0/16是固定的,192.168.150.100是master节点ip

    kubeadm init --kubernetes-version=v1.17.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.150.100 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
    
    • 1

    如果报下面这些错
    在这里插入图片描述
    在这里插入图片描述
    请执行下面2条命令后,再执行一次上面kubeadm init …

    rm -rf /etc/kubernetes/
    
    • 1
    swapoff -a && kubeadm reset  && systemctl daemon-reload && systemctl restart kubelet  && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
    
    • 1

    看到下面面板就表示k8s初始化成功
    在这里插入图片描述
    初始化成功,注意:把初始化的日志复制粘贴保存,后面有用!

    使用集群

    master节点

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    
    • 1
    • 2

    所有节点上传calico-39文件夹,导入对应的镜像
    在这里插入图片描述
    master节点修改calico.yml

    vim calico.yml
    :set nu  // 显示行号
    :607  //跳到607行
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在看622行这个地址,要跟kubeadm init 的时候–pod-network-cidr=10.244.0.0/16 保持一致
    在这里插入图片描述
    改完 :wq 保存退出

    kubectl apply -f calico.yml
    
    • 1

    在这里插入图片描述
    到两个worker节点,分别执行初始化日志中最后的kubeadm join …

    kubeadm join 192.168.150.100:6443 --token 0cestx.f8qj3deigs45kdhu \
        --discovery-token-ca-cert-hash sha256:804d4ad486083b6a73fbe24db673dda14feea91b40ef15137ff3329c210535da
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述

    验证k8s集群可用性(master节点)

    查看节点集群所有节点

    kubectl get nodes
    
    • 1

    在这里插入图片描述
    查看集群健康状态

    kubectl get cs
    
    • 1

    查看集群信息

    kubectl cluster-info
    
    • 1

    查看pods运行情况

     kubectl get pods --namespace kube-system
    
    • 1

    在这里插入图片描述

    kubectl使用

    kubectl帮助方法

    检查kubectl是否安装

    rpm -qa | grep kubectl
    
    • 1

    获取kubectl帮助方法

    kubectl --help
    
    • 1

    kubectl子命令使用分类

    在这里插入图片描述
    在这里插入图片描述
    在worker节点如何使用kubectl命令管理k8s集群?
    在worker节点执行

    mkdir .kube
    scp master1:/root/.kube/config .kube/
    
    • 1
    • 2

    使用命令验证

    kubectl get nodes
    
    • 1

    在这里插入图片描述

    NameSpace

    查看NameSpace

    kubectl get namespace
    
    • 1

    在这里插入图片描述
    说明
    default 用户创建的pod默认在此命名空间
    kube-public 所有用户均可以访问,包括未认证用户
    kube-node-lease kubernetes集群节点租约状态v1.13加入
    kube-system kubernetes集群在使用

    创建NameSpace

    kubectl create namespace test
    
    • 1

    删除NameSpace
    删除命名空间时,命名空间中包含的所有资源对象同时被删除。

    kubectl delete namespace test
    
    • 1

    Pod

    Pod是kubernetes集群能够调度的最小单元
    在这里插入图片描述

    查看pod

    查看default命名空间中的Pod

    kubectl get pod
    # 或者
    kubectl get pods
    # 或者
    kubectl get pod --namespace default
    # 或者
    kubectl get pods --namespace default
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看kube-system命名空间中的Pod

    kubectl get pod -n kube-system
    
    • 1

    在这里插入图片描述

    创建Pod

    编写用于创建Pod资源清单文件

    vim 02-create-pod.yaml
    
    • 1
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod1
    spec:
      containers:
      - name: ngninx-pod
        image: nginx:latest
        ports:
        - name: nginxport
          containerPort: 80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    应用用于创建Pod资源清单文件

    kubectl apply -f 02-create-pod.yaml
    
    • 1

    在这里插入图片描述

    查看pod更加详细信息

    kubectl get pods -o wide
    
    • 1

    在这里插入图片描述

    删除Pod

    kubectl命令行删除

    kubectl delete pods pod1
    
    • 1

    在这里插入图片描述

    通过kubectl使用Pod资源清单文件删除

    kubectl delete -f 02-create-pod.yaml
    
    • 1

    Controller(控制器)

    创建Deployment控制器类型应用

    通过kubectl命令行创建

    kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2
    
    • 1

    说明
    nginx-app 是deployment控制器类型的应用名称
    nginx:latest 是应用运行的Pod中的Container所使用的镜像
    IfNotPresent 是Container容器镜像下载策略,如果本地有镜像,使用本地,如果本地没有镜像,下载镜像
    –replicas=2 是指应用运行的Pod共计2个副本,这是用户的期望值,Deployment控制器中的ReplicaSet控制器会
    一直监控此应用运行的Pod副本状态,如果数量达不到用户期望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量。

    查看Deployment控制器类型应用

    kubectl get deployment.apps
    
    • 1

    在这里插入图片描述

    删除Deployment控制器类型应用

    先查看

     kubectl get deployment.apps
    
    • 1

    在这里插入图片描述
    再删除

    kubectl delete deployment.apps nginx-app
    
    • 1

    在这里插入图片描述

    Service

    介绍&作用

    Service 不是实体服务,是一条iptables或ipvs的转发规则,通过Service为pod客户端提供访问pod方法,即客户端访问pod入口
    Service通过Pod标签与Pod进行关联
    在这里插入图片描述

    Service类型

    ClusterIP:默认,分配一个集群内部可以访问的虚拟IP
    NodePort:在每个Node上分配一个端口作为外部访问入口
    LoadBalancer:工作在特定的Cloud Provider上,例如Google,Cloud,AWS,OpenStack
    ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信

    Service创建

    创建Deployment类型应用

    kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1
    
    • 1

    验证Deployment类型应用创建情况

    kubectl get deployment.apps
    
    • 1

    创建Service与Deployment类型应用关联

    kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80
    
    • 1

    在这里插入图片描述
    说明
    expose 创建service
    deployment.apps 控制器类型
    nginx-app 应用名称,也是service名称
    –type=ClusterIP 指定service类型
    –target-port=80 指定Pod中容器端口
    –port=80 指定service端口

    访问Service以实现访问Pod目的

    kubectl get service
    
    • 1

    在这里插入图片描述

    删除Service

    查看service

    kubectl get service
    
    • 1

    删除service

    kubectl delete service nginx-app
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    基于智能优化算法实现的机械臂避障路径规划(Matlab代码实现)
    可见性volatile
    Jmeter —— 自动录制脚本
    始祖双碳新闻 | 2022年8月1号-8月5号碳中和行业早知道
    一个 MySQL 隐式转换的坑,差点把服务器整崩溃了
    Linux锁定用户的几种方法
    idea本地运行正常,打包部署以后openFeign调用失败,返回为null,以及报错406
    http2 wireshark未解码消息字段过滤
    openvino安装踩坑笔记
    打破平台限制,小程序如何在硬件设备上运行?
  • 原文地址:https://blog.csdn.net/ZHUSHANGLIN/article/details/133898868