Kubernetes/3.使用Kubeadm部署k8s集群

使用Kubeadm部署k8s集群

kubeadm是一个提供了"kubeadm init"和"kubeadm join"最佳实践命令,且用于快速构建一个kubernetes集群的工具,你可以使用此工具快速构建一个kubernetes学习环境。
通过本章节的学习,你将能够使用kubeadm工具,成功构建出一个基础的kubernetes集群环境。

  • 环境准备
  • Hosts文件准备
  • Docker环境配置
  • 其他准备工作
  • 使用Kubeadm部署k8s集群
  • 参考文档
  • 备注

环境准备

ip 主机名 角色 操作系统
192.168.0.104 centos-1.shared master Master Centos6.4
192.168.0.108 centos-2.shared node01 Node Centos6.4
192.168.0.109 centos-3.shared node01 Node Centos6.4

Hosts文件准备

192.168.0.104 centos-1.shared master
192.168.0.108 centos-2.shared node01
192.168.0.109 centos-3.shared node02

Docker环境配置

1) 关闭系统默认防火墙和SELINUX

setenforce 0
sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
which systemctl && systemctl stop firewalld
which systemctl && systemctl disable firewalld
which systemctl && systemctl stop iptables || service iptables stop
which systemctl && systemctl disable iptables || chkconfig iptables off

2) 卸载旧版本Docker

yum remove docker             docker-client             docker-client-latest             docker-common             docker-latest             docker-latest-logrotate             docker-logrotate             docker-selinux             docker-engine-selinux             docker-engine             docker             docker-ce             docker-ee

3) 安装DockerCE

# 1.安装所需的包
# yum-utils 提供了 yum-config-manager 实用程
# 并且 devicemapper 存储驱动需要 device-mapper-persistent-data 和 lvm2
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2.更新xfsprogs
yum update xfsprogs

# 3.使用以下命令设置源
#官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#阿里源(建议使用)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4.安装Docker CE
yum install -y docker-ce    

# 4.或者安装指定版本
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-17.12.1.ce-1.el7.centos

4) 启动Docker并设置开机运行

systemctl start docker
systemctl enable docker
systemctl status docker

5) 常见问题

WARINING提示:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

#解决方案
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system

其他准备工作

1) 关闭防火墙

systemctl stop firewalld.service
systemctl stop iptables.service
systemctl disable firewalld.service
systemctl disable iptables.service

2) 禁用SELINUX

#临时关闭:
setenforce 0            

#永久关闭:
vim /etc/selinux/config
SELINUX=disabled

3) 禁用swap设备(影响性能,k8s集群初始化会报错)

#临时禁用
swapoff  -a

#永久禁用
Vim  /etc/fstab
注释 /dev/mapper/VolGroup-lv_swap swap 所在的行

4) 启用ipvs内核模块 创建内核模块载入相关的脚本文件/etc/sysconfig/modules/ipvs.modules,设定自动载入的内核模块。文件内容如下(用到再配置也可以)

#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for i in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do
    /sbin/modinfo -F filename $i  &> /dev/null
    if [ $? -eq 0 ]; then
        /sbin/modprobe $i
    fi
done

# 赋权、运行并检查
chmod +x /etc/sysconfig/modules/ipvs.modules
/etc/sysconfig/modules/ipvs.modules
lsmod |grep ip_vs

5) docker文件配置(docker unit file: /usr/lib/systemd/system/docker.service)

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStartPost=/usr/sbin/iptables -P FPRWARD ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSe=0
RestartSec=2
Restart=always

systemctl daemon-reload
systemctl restart docker

#变量查看
docker info

使用Kubeadm部署k8s集群

1) 首先安装k8s相关软件包。
阿里云镜像仓库配置如下所示:

cd /etc/yum.repos.d/
vi k8s.repo

[kubernetes]
name=Kubernetes Repository
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

2) 仓库载入情况检查

yum repolist

[[email protected] yum.repos.d]# yum list all |grep "^kube"
kubeadm.x86_64                              1.16.3-0                   kubernetes
kubectl.x86_64                              1.16.3-0                   kubernetes
kubelet.x86_64                              1.16.3-0                   kubernetes
kubernetes.x86_64                           1.5.2-0.7.git269f928.el7   extras
kubernetes-client.x86_64                    1.5.2-0.7.git269f928.el7   extras
kubernetes-cni.x86_64                       0.7.5-0                    kubernetes
kubernetes-master.x86_64                    1.5.2-0.7.git269f928.el7   extras
kubernetes-node.x86_64                      1.5.2-0.7.git269f928.el7   extras 

3) 使用yum安装kubeadm 、kubectl和kubelet

    yum install kubeadm  kubectl kubelet

4) 检查相关软件包是否完整

[[email protected] yum.repos.d]# rpm -ql kubelet
/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/usr/bin/kubelet
/usr/lib/systemd/system/kubelet.service

5) 配置kubelet,swap处于启用状态时,不要报错(如果上面配置了关闭swap,可省略)

     vim /etc/sysconfig/kubelet
     KUBELET_EXTRA_ARG="--fail-swap-on=false”

6) 初始化集群(Master节点)

#集群镜像获取
https://www.jianshu.com/p/8bc61078bded

kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
kubeadm config images pull

#方式一:命令行(--dry-run:试运行,不会有改动)
kubeadm init --kubernetes-version=v1.16.0 --pod-network-cidr="10.244.0.0/16"  --dry-run

#方式二:Yml配置文件,使用—config string

#集群初始化完毕后,创建用户(最好用普通账号创建):
mkdir -p $HOME/.kube

#切换至Root用户操作:
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config(主配置文件,至关重要,不能泄露)
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#集成flannel插件,并观察
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#Pod情况查看:
kubectl get pods -n kube-system

#集群初始化完毕
kubectl get nodes

7) Node节点

  • 从主节点复制repo配置到对应node节点上:

    scp k8s.repo node01:/etc/yum.repos.d/
    scp /etc/sysconfig/kubelet  node01:/etc/sysconfig
    scp k8s.repo node02:/etc/yum.repos.d/
    scp /etc/sysconfig/kubelet  node02:/etc/sysconfig
    scp  /run/flannel/subnet.env node01: /run/flannel/subnet.env
    scp  /run/flannel/subnet.env node02: /run/flannel/subnet.env

8) 在主节点打包node所需镜像,并scp到各node节点

docker save -o k8s-node.tar k8s.gcr.io/coredns quay.io/coreos/flannel k8s.gcr.io/pause
scp k8s-node.tar node01:/
scp k8s-node.tar node02:/

9) Node节点:

  • 加载镜像( coredns、 flannel、 pause):

    cd / && docker load —input k8s-node.tar
    yum install kubelet kubeadm    
  • 添加集群。注意这个token是第六步初始化集群给你的,用于node节点加入节点时候用的。
    kubeadm join 192.168.0.104:6443 --token z9kmma.p8ak2ffytr7gjnsv --discovery-token-ca-cert-hash sha256:82ee3a673e99fa8f46a8f515fa430819b595d532f3fcb21d9c3114f3394b4b0d 

10) 部署完毕,并检查集群状态(Master),此时一个基础的kubernetes集群已经构建完成了。

kubectl get nodes
NAME              STATUS   ROLES    AGE   VERSION
centos-1.shared   Ready    master   41m   v1.16.3
centos-2.shared   Ready    <none>   19m   v1.16.3
centos-3.shared   Ready    <none>   18m   v1.16.3

参考文档

官方文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

备注

本文原址位于我的Github,我会陆续将所有专题更新过来,其中包括docker、k8s、ceph、istio和prometheus,旨在分享云原生中大而全的技术知识点和实操过程,如果对你有用,请follow、star我的github,这也是我更新、分享下去的动力,谢谢~

原文地址:https://blog.51cto.com/qishiding/2462771

时间: 2024-10-04 15:48:21

Kubernetes/3.使用Kubeadm部署k8s集群的相关文章

Kubernetes学习之路(一)之Kubeadm部署K8S集群

一个星期会超过多少阅读量呢??发布一篇,看看是否重新在51上写学习博文,有老铁支持嘛?? 使用kubeadm部署集群 节点名称 ip地址 部署说明 Pod 网段 Service网段 系统说明 k8s-master 192.168.56.11 docker.kubeadm.kubectl.kubelet 10.244.0.0/16 10.96.0.0/12 Centos 7.4 k8s-node01 192.168.56.12 docker.kubeadm.kubelet 10.244.0.0/1

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver 2018/1/4 配置 LB 指向 kube-apiserver 小目标:在 3 个 master 节点前,还需配置一个 LB 来作为 apiserver 的入口 LB -> master x3 直接使用阿里云内网 SLB L4 proxy 资源(本次实例是 4 层而不使用 7 层的原因是:跳过了处理证书的环节) 申请下来资源后,将得到一个 vip 指向上述 3 个 master 节点的 IP 作为后端真实服务器 注

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver 2018/1/4 配置 kubectl 访问 kube-apiserver 切换 master 节点连接到本节点的 apiserver 确认集群信息 切换 master 节点连接到本节点的 apiserver ### 为了在这 2 个新的节点执行 kubectl 需要配置 admin.yaml [[email protected] ~]# mkdir -p ~/k8s_install/master/admi

使用kubeadm部署k8s集群01-初始化

使用kubeadm部署k8s集群01-初始化 2018/1/3 节点配置 master x3 OS version: centos7 swapoff ### 阿里云默认:off hosts ### 每个节点上配置: [[email protected] ~]# cat /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 Docker version: latest(17.0

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点 2018/1/4 扩容 kube-scheduler 到 3 节点 连接到本节点的 apiserver [[email protected] kube-controller-manager]# cat /etc/kubernetes/manifests/kube-scheduler.yaml |grep '/etc/kubernetes' --kubeconfig=/etc/kubernetes/scheduler.

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点 2018/1/4 配置 worker 节点 初始化 加入集群 切换 worker 节点连接到 apiserver 的 LB 入口 调整集群中节点角色和调度策略 初始化 /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 k8s worker @envDev 10.10.9.74 tvm-0310.10.9.75 t

使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点

使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点 2018/1/3 扩容 kube-apiserver 到 3 节点 配置 kube-apiserver.yaml 分析 kube-apiserver 依赖的证书 为新节点生成专属证书 下发证书到对应的节点 确认每个节点的 apiserver 是否处于 Running 状态 配置 kube-apiserver.yaml ### 拷贝原 master 上的配置: [[email protected] ~]# mkdir

使用kubeadm部署k8s集群02-配置etcd高可用

使用kubeadm部署k8s集群02-配置etcd高可用 2018/1/4 配置 etcd 高可用 新建一个 2 节点的 etcd cluster 查看 etcd 的状态 迁移原来 master 节点上的 etcd 数据到上面新建的 etcd cluster 中 切换 kube-apiserver 使用新的 etcd endpoint 地址 清理掉原来的单节点 etcd 服务 重建一个 etcd 服务,加入新集群 部署新的 etcd 节点 更新另外2个节点的 etcd.yaml 配置 新建一个

使用kubeadm部署k8s集群00-缓存gcr.io镜像

使用kubeadm部署k8s集群00-缓存gcr.io镜像 2018/2/7 原因:kubeadm init 时,需要下载一些镜像,但国内网络原因,大家懂的,不容易下载,此时,只能去绕过它.备注:官方在 1.5 收到阿里一位童鞋的 PR 来允许指定一个第三方的 registry 来解决上述问题,但因为时间所限,并未找到具体的操作方法. [在国外节点上操作] 镜像来源 针对下述镜像: gcr.io/google_containers/kube-apiserver-amd64:v1.9.0 gcr.