Kubernetes(k8s)入门到实战教程(kubeadm方式)


theme: qklhk-chocolate

highlight: tomorrow-night

二、kubernetes集群搭建(kubeadm方式)

1、前置知识点

目前生产部署Kubernetes集群主要有两种方式: - 1 kubeadm

Kubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于快速部署Kubernetes集群。

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

  • 2 二进制包

从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

2、kubeadm部署方式介绍

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

第一、创建一个Master节点kubeadminit

第二,将Node节点加入到当前集群中$kubeadmjoin

3、安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统CentOS7.x-86_x64

  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多

  • 集群中所有机器之间网络互通

  • 可以访问外网,需要拉取镜像

  • 禁止swap分区

4、最终目标

(1)在所有节点上安装Docker和kubeadm

(2)部署KubernetesMaster

(3)部署容器网络插件

(4)部署KubernetesNode,将节点加入Kubernetes集群中

(5)部署DashboardWeb页面,可视化查看Kubernetes资源

5、准备环境

图片.png

| 主机名 | IP地址 | | --- | --- | | master | 37.10 | | node1 | 37.11 | | node2 | 37.12 |

6、系统初始化

6.1 关闭防火墙、禁止开机启动防火墙

```Master和Node systemctl stop firewalld

systemctl disable firewalld ``` 6.2 关闭selinux

```Master和Node

永久

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

临时

setenforce 0 6.3 关闭swap Master和Node

临时

swapoff -a

永久

sed -ri 's/.swap./#&/' /etc/fstab 6.4 主机名 Master和Node hostnamectl set-hostname ``` 6.5 添加hosts

Master和Node cat >> /etc/hosts <<EOF 192.168.37.10 master 192.168.37.11 node1 192.168.37.12 node2 EOF 6.6 将桥接的IPv4流量传递到iptables的链、地址转发

```Master和Node cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF

生效

sysctl --system

加载网桥过滤模块

modprobe br_netfilter

查看网桥过滤模块是否加载成功

lsmod | grep br_netfilter ``` 6.7 时间同步

```Master和Node yum install ntpdate -y

ntpdate time.windows.com

设置时区

timedatectl set-timezone Asia/Shanghai ``` 6.8 配置ipvs功能

在kubernetes中service有两种代理模型,一种基于iptables的,一种基于ipvs的,两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块 ```go

1 安装ipset和ipvsadm

yum install ipset ipvsadm -y

2 添加需要加载的模块写入脚本文件

cat << EOF > /etc/sysconfigmodules/ipvs.modules

!/bin/bash

modprobe -- ipvs modprobe -- ipvsrr modprobe -- ipvswrr modprobe -- ipvssh modprobe -- nfconntrack_ipv4 EOF

3 为脚本文件添加执行权限

chmod +x /etc/sysconfig/modules/ipvs.modules

4 执行脚本文件

/bin/bash /etc/sysconfig/modules/ipvs.modules

5 查看对应的模块是否加载成功

lsmod |grep -e ipvs -e nfconntrack_ipv4 ```

7、 所有节点安装(Docker/kubeadm/kubelet)

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

7.1 需要epel源 ```Master和Node wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

yum install epel-release -y ``` 7.2 安装Docker

```Master和Node wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

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

systemctl enable docker && systemctl start docker

docker --version 7.3 Docker镜像仓库改成阿里的 Master和Node cat > /etc/docker/daemon.json << EOF { "registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"] } EOF ``` 7.4 添加yum源

```Master和Node cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x8664 enabled=1 gpgcheck=0 repogpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

重启服务

systemctl restart docker ```

8、安装kubeadmin,kubelet 和 kubectl

```Master和Node

如果报错、用'yum clean all'清除YUM缓存、再试!!!

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

设置kubectl开机起动

systemctl enable kubelet ```

9、 部署Kubernetes Master

(Master) 执行 Master kubeadm init \ --apiserver-advertise-address=192.168.37.10 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

使用kubectl工具 ```Master mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config Master kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 36s v1.18.0 ```

图片.png

10、 加入Kubernetes Node

37.11/12(Node)执行

向集群添加新节点,执行kubeadm init输出的kubeadm join命令 Node kubeadm join 192.168.37.10:6443 --token rs6ic6.l8ep2taybz0o7gkv \ --discovery-token-ca-cert-hash sha256:5369ce646d6302aacc3d876e2efd1e151b5798b4c31c40b1e1d9255f9a4f8583 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下: Master kubeadm token create --print-join-command

(Master) 查看、节点添加成功 Master kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 56s v1.18.0 node1 NotReady <none> 17s v1.18.0 node2 NotReady <none> 17s v1.18.0

11、 部署CNI网络插件(参考)

默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。 Master wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 此处下载不成功需要科学上网(VPN、可点击上面参考) Master kubectl apple -f kube-flannel.yml 此步可忽略!!!如果此处一直'Pending'、执行'sed -i 's/--network-plugin=cni//' /var/lib/kubelet/kubeadm-flags.env' ```Master

kubectl get pods -n kube-system

NAME READY STATUS RESTARTS AGE coredns-7ff77c879f-b7l7k 1/1 Running 0 130m coredns-7ff77c879f-mmvc7 1/1 Running 0 130m etcd-master 1/1 Running 0 130m kube-apiserver-master 1/1 Running 0 130m kube-controller-manager-master 1/1 Running 0 130m kube-flannel-ds-amd64-5plgj 1/1 Running 0 43m kube-flannel-ds-amd64-f7b5z 1/1 Running 0 43m kube-flannel-ds-amd64-zvbgd 1/1 Running 0 43m kube-proxy-lbswc 1/1 Running 0 122m kube-proxy-skkrc 1/1 Running 0 122m kube-proxy-x4f2b 1/1 Running 0 130m kube-scheduler-master 1/1 Running 0 130m ```

12、测试 kubernetes 集群

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

```Master kubectl create deployment nginx --image=nginx

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

kubectl get pod,svc ``` 访问地址:http://NodeIP:Port

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值