• 2、k8s 集群安装


    1、kubeadm
    kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。
    这个工具能通过两条指令完成一个 kubernetes 集群的部署:

    # 创建一个 Master 节点
    $ kubeadm init
    # 将一个 Node 节点加入到当前集群中
    $ kubeadm join <Master 节点的 IP 和端口 >
    
    • 1
    • 2
    • 3
    • 4

    2、前置要求
    一台或多台机器,操作系统 CentOS7.x-86_x64
    硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
    集群中所有机器之间网络互通
    可以访问外网,需要拉取镜像
    禁止 swap分区

    3、部署步骤
    1.在所有节点上安装 Docker 和 kubeadm
    2.部署 Kubernetes Master
    3.部署容器网络插件
    4.部署 Kubernetes Node,将节点加入 Kubernetes 集群中
    5.部署 Dashboard Web 页面,可视化查看 Kubernetes 资源

    在这里插入图片描述
    4、环境准备
    1、准备工作
     我们可以使用 vagrant 快速创建三个虚拟机。虚拟机启动前先设置 virtualbox 的主机网
    络。现全部统一为 192.168.56.1,以后所有虚拟机都是 56.x 的 ip 地址
    在这里插入图片描述
     设置虚拟机存储目录,防止硬盘空间不足
    在这里插入图片描述
    2、启动三个虚拟机

     使用我们提供的 vagrant 文件,复制到非中文无空格目录下,运行 vagrant up 启动三个
    虚拟机。其实 vagrant 完全可以一键部署全部 k8s 集群。

    https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster
    http://github.com/davidkbainbridge/k8s-playground
    
    • 1
    • 2

     进入三个虚拟机,开启 root 的密码访问权限。

    Vagrant ssh XXX 进去系统之后
    su root 密码为 vagrant
    vi /etc/ssh/sshd_config
    修改 PasswordAuthentication yes/no
    重启服务 service sshd restart
    所有虚拟机设置为 44G
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    设置好 NAT 网络
    3、设置 linux 环境(三个节点都执行)

    关闭防火墙:
    systemctl stop firewalld
    systemctl disable firewalld
    关闭 selinux:
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    setenforce 0
    关闭 swap
    swapoff -a 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab 永久
    free -g 验证,swap 必须为 0;
    添加主机名与 IP 对应关系
    vi /etc/hosts
    10.0.2.15 k8s-node1
    10.0.2.24 k8s-node2
    10.0.2.25 k8s-node3
    hostnamectl set-hostname <newhostname>:指定新的 hostname
    su 切换过来
    将桥接的 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
    疑难问题:
    遇见提示是只读的文件系统,运行如下命令
    mount -o remount rw /
    date 查看时间 (可选)
    yum install -y ntpdate
    ntpdate time.windows.com 同步最新时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    5、所有节点安装 Docker、kubeadm、kubelet、kubectl
    Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。
    1、安装 docker
    1、卸载系统之前的 docker

    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、安装 Docker-CE

    安装必须的依赖
    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    设置 docker repo 的 yum 位置
    sudo yum-config-manager \ --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    安装 docker,以及 docker-cli
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3、配置 docker 加速

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4、启动 docker & 设置 docker 开机自启

    systemctl enable docker
    
    • 1

    基础环境准备好,可以给三个虚拟机备份一下;为 node3 分配 16g,剩下的 3g。方便未来
    侧测试

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

    3、安装 kubeadm,kubelet 和 kubectl

    yum list|grep kube
    yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
    systemctl enable kubelet
    systemctl start kubelet
    
    • 1
    • 2
    • 3
    • 4

    6、部署 k8s-master
    1、master 节点初始化

    $ kubeadm init \ --apiserver-advertise-address=10.0.2.15 \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version v1.17.3 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16
    
    • 1

    由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。可以手动
    按照我们的 images.sh 先拉取镜像,
    地址变为 registry.aliyuncs.com/google_containers 也可以。
    科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
    地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
    拉取可能失败,需要下载镜像。
    运行完成提前复制:加入集群的令牌
    2、测试 kubectl(主节点执行)

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    $ kubectl get nodes 获取所有节点
    
    • 1
    • 2
    • 3
    • 4

    目前 master 状态为 notready。等待网络加入完成即可。

    journalctl -u kubelet 查看 kubelet 日志
    kubeadm join 10.0.2.15:6443 --token 8mgmlh.cgtgsp3samkvpksn \ --discovery-token-ca-cert-hash
    sha256:3cf99aa2e6bfc114c5490a7c6dffcf200b670af21c5a662c299b6de606023f85
    
    • 1
    • 2
    • 3

    7、安装 Pod 网络插件(CNI)

    $ kubectl apply -f \
    https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    • 1
    • 2

    以上地址可能被墙,大家获取上传我们下载好的 flannel.yml 运行即可,同时 flannel.yml 中
    指定的 images 访问不到可以去 docker hub 找一个
    wget yml 的地址
    vi 修改 yml 所有 amd64 的地址都修改了即可。
    等待大约 3 分钟

    kubectl get pods -n kube-system 查看指定名称空间的 pods
    kubectl get pods –all-namespace 查看所有名称空间的 pods
    $ ip link set cni0 down 如果网络出现问题,关闭 cni0,重启虚拟机继续测试
    执行 watch kubectl get pod -n kube-system -o wide 监控 pod 进度
    等 3-10 分钟,完全都是 running 以后继续
    
    • 1
    • 2
    • 3
    • 4
    • 5

    8、加入 Kubernetes Node
    在 Node 节点执行。
    向集群添加新节点,执行在 kubeadm init 输出的 kubeadm join 命令:
    确保 node 节点成功
    token 过期怎么办

    kubeadm token create --print-join-command
    kubeadm token create --ttl 0 --print-join-command
    kubeadm join --token y1eyw5.ylg568kvohfdsfco --discovery-token-ca-cert-hash
    sha256: 6c35e4f73f72afd89bf1c8c303ee55677d2cdb1342d67bb23c852aba2efc7c73
    
    • 1
    • 2
    • 3
    • 4

    执行 watch kubectl get pod -n kube-system -o wide 监控 pod 进度
    等 3-10 分钟,完全都是 running 以后使用 kubectl get nodes 检查状态
    9、入门操作 kubernetes 集群

    1、部署一个 tomcat
    kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8
    Kubectl get pods -o wide 可以获取到 tomcat 信息
    2、暴露 nginx 访问
    kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort
    Pod80 映射容器的 8080;service 会代理 Pod80
    3、动态扩容测试
    kubectl get deployment
    应用升级 kubectl set image (--help 查看帮助)
    扩容: kubectl scale --replicas=3 deployment tomcat6
    扩容了多份,所有无论访问哪个 node 的指定端口,都可以访问到 tomcat6
    4、以上操作的 yaml 获取
    参照 k8s 细节
    5、删除
    Kubectl get all
    kubectl delete deploy/nginx
    kubectl delete service/nginx-service
    流程;创建 deployment 会管理 replicas,replicas 控制 pod 数量,有 pod 故障会自动拉起
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    新的 pod

  • 相关阅读:
    使用 AIGC ,ChatGPT 快速合并Excel工作薄
    微信小程序案例2-1:学生信息
    悬浮工具球(仿 iphone 辅助触控)
    【测试面试】测试开发面试算法高频题,这些题你会多少?
    2023年蓝帽杯取证复现
    vue3、uniapp-vue3模块自动导入
    【JavaScript总结】js基础知识点
    Openssl
    【技术积累】Vue.js中的CSS过渡【一】
    如何将PDF文件转换成Excel呢?
  • 原文地址:https://blog.csdn.net/weixin_45817985/article/details/134227642