K8S 之 kubeadm 安装

kubeadm 概述

Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。

环境

  • 阿里云两台CentOS 7.7 64位 ECS
  • 安装 K8S v1.16.3 版本
  • pod-network-cidr 地址段划分为 10.96.0.0/12
  • service-cluster-ip-range 地址段划分为 10.244.0.0/16
名称 内部IP 系统配制
k8s-master1 172.17.94.205 2核CPU,4G内存
k8s-node1 172.17.94.206 2核CPU,4G内存

主机用途划分

名称 用途
k8s-master1 etcd kubeadm kube-apiserver kube-scheduler kube-controller-manager kubelet flanneld docker
k8s-node1 kubeadm kubelet flanneld docker

初始化基础环境

运行下面 init.sh shell 脚本,脚本完成下面四项任务

  • 设置服务器 hostname
  • 安装 k8s依赖环境
  • 升级系统内核(升级Centos7系统内核,解决Docker-ce版本兼容问题)
  • 安装 docker ce 最新版本
# 添加脚本执行权限并初始化 k8s-master1 机器
$ chmod +x init.sh && ./init.sh k8s-master1
#!/usr/bin/env bash

function Check_linux_system(){
    linux_version=`cat /etc/redhat-release`
    if [[ ${linux_version} =~ "CentOS" ]];then
        echo -e "\033[32;32m 系统为 ${linux_version} \033[0m \n"
    else
        echo -e "\033[32;32m 系统不是CentOS,该脚本只支持CentOS环境\033[0m \n"
        exit 1
    fi
}

function Set_hostname(){
    if [ -n "$HostName" ];then
      grep $HostName /etc/hostname && echo -e "\033[32;32m 主机名已设置,退出设置主机名步骤 \033[0m \n" && return
      case $HostName in
      help)
        echo -e "\033[32;32m bash init.sh 主机名 \033[0m \n"
        exit 1
      ;;
      *)
        hostname $HostName
        echo "$HostName" > /etc/hostname
        echo "`ifconfig eth0 | grep inet | awk ‘{print $2}‘` $HostName" >> /etc/hosts
      ;;
      esac
    else
      echo -e "\033[32;32m 输入为空,请参照 bash init.sh 主机名 \033[0m \n"
      exit 1
    fi
}

function Install_depend_environment(){
    rpm -qa | grep nfs-utils &> /dev/null && echo -e "\033[32;32m 已完成依赖环境安装,退出依赖环境安装步骤 \033[0m \n" && return
    yum install -y nfs-utils curl yum-utils device-mapper-persistent-data lvm2 net-tools conntrack-tools wget vim  ntpdate libseccomp libtool-ltdl telnet
    echo -e "\033[32;32m 升级Centos7系统内核到5版本,解决Docker-ce版本兼容问题\033[0m \n"
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org &&     rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm &&     yum --disablerepo=\* --enablerepo=elrepo-kernel repolist &&     yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64 &&     yum remove -y kernel-tools-libs.x86_64 kernel-tools.x86_64 &&     yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64 &&     grub2-set-default 0
    modprobe br_netfilter
    cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
    sysctl -p /etc/sysctl.d/k8s.conf
    ls /proc/sys/net/bridge
}

function Install_docker(){
    rpm -qa | grep docker && echo -e "\033[32;32m 已安装docker,退出安装docker步骤 \033[0m \n" && return
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum makecache fast
    yum -y install docker-ce
    systemctl enable docker.service
    systemctl start docker.service
    systemctl stop docker.service
    echo ‘{"registry-mirrors": ["https://4xr1qpsp.mirror.aliyuncs.com"]}‘ > /etc/docker/daemon.json
    systemctl daemon-reload
    systemctl start docker
}

# 初始化顺序
HostName=$1
Check_linux_system && Set_hostname && Install_depend_environment && Install_docker

注意: 脚本只支持 Centos 系统,支持重复运行,下面是脚本第二次运行结果

$  ./init.sh k8s-master1

 系统为 CentOS Linux release 7.7.1908 (Core)

k8s-master1
 主机名已设置,退出设置主机名步骤

 已完成依赖环境安装,退出依赖环境安装步骤

docker-ce-cli-19.03.5-3.el7.x86_64
docker-ce-19.03.5-3.el7.x86_64
 已安装docker,退出安装docker步骤

k8s 部署

  • 配置 k8s源
# k8s-master1 和 k8s-node1 机器都需要操作
# 添加 k8s yum 源
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF

# 重建 yum缓存
$ yum makecache fast
  • 安装 kubeadm、kubelet、kubectl
# k8s-master1 机器上操作
# 安装 kubeadm、kubelet、kubectl v1.16.3 版本,设置 kubelet 开机启动

$ yum install -y kubeadm-1.16.3 kubectl-1.16.3 kubelet-1.16.3 --disableexcludes=kubernetes && systemctl enable --now kubelet
  • 换国内镜像源拉取镜像
# k8s-master1 机器上操作
# 查看镜像版本
$ kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.16.3
k8s.gcr.io/kube-controller-manager:v1.16.3
k8s.gcr.io/kube-scheduler:v1.16.3
k8s.gcr.io/kube-proxy:v1.16.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2

# 使用如下脚本下载国内镜像,并修改tag为google的tag
$ vim kubeadm.sh

#!/bin/bash

set -e

KUBE_VERSION=v1.16.3
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.15-0
CORE_DNS_VERSION=1.6.2

GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})

for imageName in ${images[@]} ; do
  docker pull $ALIYUN_URL/$imageName
  docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
  docker rmi $ALIYUN_URL/$imageName
done

# 运行脚本,拉取镜像
$ bash kubeadm.sh
  • master 节点安装
# k8s-master1 机器上操作
$ sudo kubeadm init  --apiserver-advertise-address 172.17.94.205  --kubernetes-version=v1.16.3  --pod-network-cidr=10.244.0.0/16

# 返回结果
# 下面是添加节点需要执行以下命令

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.17.94.205:6443 --token g59i0k.4ccldean82uvhuq2     --discovery-token-ca-cert-hash sha256:2d815a28094ac4c4659407117b5975c6a7dc8aa1cfd003660cb270e4e58ff6fd

# 添加 k8s config 文件到 .kube 目录
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 需要安装多个master节点,则使用下面初始化命令
$ kubeadm init  --apiserver-advertise-address 172.17.94.205 --control-plane-endpoint 172.17.94.205  --kubernetes-version=v1.16.3  --pod-network-cidr=10.244.0.0/16  --upload-certs

# 添加master节点命令
# 注:这里的token会不同,不要直接复制。kubeadm init成功后会输出添加 master节点的命令
$ kubeadm join 172.17.94.205:6443 --token g34zaa.ur84appk8h9r3yik --discovery-token-ca-cert-hash sha256:abe426020f2c6073763a3697abeb14d8418c9268288e37b8fc25674153702801     --control-plane --certificate-key 9b9b001fdc0959a9decef7d812a2f006faf69ca44ca24d2e557b3ea81f415afe
  • Node 节点安装
# k8s-node1 机器上操作
# 安装 kubeadm kubelet
$ yum install -y kubeadm-1.16.3 kubectl-1.16.3 kubelet-1.16.3 --disableexcludes=kubernetes && systemctl enable --now kubelet

# 添加 node 节点,暂时先忽略错误
$ kubeadm join 172.17.94.205:6443 --token g59i0k.4ccldean82uvhuq2     --discovery-token-ca-cert-hash sha256:2d815a28094ac4c4659407117b5975c6a7dc8aa1cfd003660cb270e4e58ff6fd     --ignore-preflight-errors=all

# 如果添加节点失败,或是想重新添加,可以使用命令,不要在 master 节点使用
$ kubeadm reset
  • 安装网络组件 flanneld
# k8s-master1
# 下载flannel配置文件
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# k8s-master1 和 k8s-node1 机器都需要操作
# 更换源,使用国内镜像源下载,再修改tag
$ vim flanneld.sh

#!/bin/bash

set -e

FLANNEL_VERSION=v0.11.0

# 在这里修改源
QUAY_URL=quay.io/coreos
QINIU_URL=quay-mirror.qiniu.com/coreos

images=(flannel:${FLANNEL_VERSION}-amd64
flannel:${FLANNEL_VERSION}-arm64
flannel:${FLANNEL_VERSION}-arm
flannel:${FLANNEL_VERSION}-ppc64le
flannel:${FLANNEL_VERSION}-s390x)

for imageName in ${images[@]} ; do
  docker pull $QINIU_URL/$imageName
  docker tag  $QINIU_URL/$imageName $QUAY_URL/$imageName
  docker rmi $QINIU_URL/$imageName
done

# 运行脚本
$ bash flanneld.sh
# k8s-master1 机器上操作
# 拷贝 master 机器 kube-proxy pause coredns 镜像
$ docker save -o pause.tar k8s.gcr.io/pause:3.1
$ docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:v1.16.3
$ docker save -o coredns.tar k8s.gcr.io/coredns:1.6.2

# 使用 scp 或者 rsync 命令 拷贝 pause.tar kube-proxy.tar coredns.tar
$ scp pause.tar kube-proxy.tar coredns.tar k8s-node1:/root/

# k8s-node1 机器上操作
$ docker load -i pause.tar
$ docker load -i kube-proxy.tar
$ docker load -i coredns.tar
# k8s-master1
# 安装 flanneld
$ kubectl apply -f kube-flannel.yml

# 查看 node 节点 和 所有pods 是否正常
$ kubectl  get node

NAME          STATUS   ROLES    AGE   VERSION
k8s-master1   Ready    master   38m   v1.16.3
k8s-node1     Ready    <none>   19m   v1.16.3

$ kubectl  get pods -A -o wide

NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
kube-system   coredns-5644d7b6d9-gfzg7              1/1     Running   0          37m     10.244.1.2      k8s-node1     <none>           <none>
kube-system   coredns-5644d7b6d9-prgkc              1/1     Running   0          37m     10.244.1.3      k8s-node1     <none>           <none>
kube-system   etcd-k8s-master1                      1/1     Running   0          36m     172.17.94.205   k8s-master1   <none>           <none>
kube-system   kube-apiserver-k8s-master1            1/1     Running   0          36m     172.17.94.205   k8s-master1   <none>           <none>
kube-system   kube-controller-manager-k8s-master1   1/1     Running   0          36m     172.17.94.205   k8s-master1   <none>           <none>
kube-system   kube-flannel-ds-amd64-8x9qp           1/1     Running   0          5m32s   172.17.94.205   k8s-master1   <none>           <none>
kube-system   kube-flannel-ds-amd64-ffffg           1/1     Running   0          5m32s   172.17.94.206   k8s-node1     <none>           <none>
kube-system   kube-proxy-dd6l4                      1/1     Running   0          18m     172.17.94.206   k8s-node1     <none>           <none>
kube-system   kube-proxy-pwtkt                      1/1     Running   0          37m     172.17.94.205   k8s-master1   <none>           <none>
kube-system   kube-scheduler-k8s-master1            1/1     Running   0          36m     172.17.94.205   k8s-master1   <none>           <none>

关注我

欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

原文地址:https://blog.51cto.com/yangpeng14/2453424

时间: 2024-08-01 08:17:49

K8S 之 kubeadm 安装的相关文章

kubernetes系列03—kubeadm安装部署K8S集群

1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm 安装kubernetes(本文演示的就是此方法) 优点:你只要安装kubeadm即可:kubeadm会帮你自动部署安装K8S集群:如:初始化K8S集群.配置各个插件的证书认证.部署集群网络等.安装简易. 缺点:不是自己一步一步安装,可能对K8S的理解不会那么深:并且有那一部分有问题,自己不好修正. 1.3.2 方法2:二进制安装部署k

kubeadm安装k8s

软件版本: kubelet:V1.13.3 docker: 18.06.1 实验环境: Centos 7.5.1804 说明: 初学.安装步骤参考了阿良的文档,并做了部分修改. 步骤如下: 1.关闭防火墙: $ systemctl stop firewalld $ systemctl disable firewalld 2.关闭selinux: $ sed -i 's/enforcing/disabled/' /etc/selinux/config $ setenforce 0 3.关闭swap

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. PS: 篇幅有点长,但是比较详细.比较全面 一.Centos7 配置说明 1.1   Firewalld(防火墙) CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server.kubelet等等)需要相互通信的端口

K8S 集群安装

一.环境 1.操作系统 Centos 7.4 2.主机信息 K8S Master主机: kb-master-001 192.168.0.11 kb-master-002 192.168.0.12 kb-master-003 192.168.0.13 K8S Node主机: kb-node-001 192.168.0.11 kb-node-002 192.168.0.12 kb-node-003 192.168.0.13 kb-node-004 192.168.0.14 K8S etcd主机: k

使用kubeadm安装Kubernete以及常见问题解答

关于K8S: Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩 容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台. 相信看过我博客的童鞋应该知道,我在14年的时候就发表了一篇名为Docker容器管理之Kubernetes当时国内Docker刚刚兴起,对于Docker的兴起我很有感触,仿佛一瞬间就火了,当时也是一个偶然的机会了解到K8S,所以当时就写文简单的介绍了下K8S以及如何采用源码

k8s之二进制安装etcd集群

前言 kubeadm安装的集群,默认etcd是一个单机的容器化的etcd,并且k8s和etcd通信没有经过ssl加密和认证,这点是需要改造的.所以首先我们需要先部署一个三节点的etcd集群,二进制部署,systemd守护进程,并且需要生成ca证书 ETCD集群详情 主机 IP 节点名称 etcd的名称 主机01 192.168.56.200 MM etcd1 主机02 192.168.56.201 SS01 etcd2 主机03 192.168.56.202 SS02 etcd3 master上

centos7使用kubeadm安装kubernetes 1.11版本多主高可用

centos7使用kubeadm安装kubernetes 1.11版本多主高可用 [TOC] kubernetes介绍要学习一个新的东西,先了解它是什么,熟悉基本概念会有很大帮助.以下是我学习时看过的一篇核心概念介绍.http://dockone.io/article/932 搭建Kubernetes集群环境有以下3种方式: minikubeMinikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境.官方地址:ht

kubeadm安装kubernetes-v1.13.1

kubeadm安装kubernetes-v1.13.1 centos虚拟机使用kubeadm安装k8s-v1.13.1. 机器信息如下: 主机名 ip master 192.168.239.200 node1 192.168.239.201 node2 192.168.239.202 环境准备 设置主机名 192.168.239.200 master 192.168.239.201 node1 192.168.239.202 node2 关闭swap swapoff -a sed -i 's/.

使用kubeadm安装kubernetes v1.14.1

使用kubeadm安装kubernetes v1.14.1 一.环境准备 操作系统:Centos 7.5 ? ? 一台或多台运?行行着下列列系统的机器?: ? Ubuntu 16.04+ ? Debian 9 ? CentOS 7 ? RHEL 7 ? Fedora 25/26 (尽?力力服务) ? HypriotOS v1.0.1+ ? Container Linux (针对1800.6.0 版本测试) ? 每台机器? 2 GB 或更更多的 RAM (如果少于这个数字将会影响您应?用的运?行行