【k8s】(一) 使用kubeadm快速部署一个K8s集群

目录

一、基础概念

二、硬件要求

三、环境准备与规划

四、安装docker并添加yum源

4.1 安装docker

4.2 设置docker镜像仓库地址

4.3 设置k8s的YUM源

五、安装kubeadm,kubelet和kubectl

六、部署K8s Master

6.1 kubeadm初始化并下载镜像

6.2 复制配置文件,并授权 

6.3 查看节点

七、部署K8s Slave

7.1 master生成token

7.2 从节点加入master

7.3 再次查看节点

八、部署CNI网络插件

九、测试K8s集群

十、卸载k8s


一、基础概念

官网 :KubernetesKubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。星际尺度 Google 每周运行数十亿个容器,Kubernetes 基于与之相同的原则来设计,能够在不扩张运维团队的情况下进行规模扩展。处处适用 无论是本地测试,还是跨国公司,Kubernetes 的灵活性都能让你在应对复杂系统时得心应手。永不过时 Kubernetes 是开源系统,可以自由地部署在企业内部,私有云、混合云或公有云,让您轻松地做出合适的选择。将 150+ 微服务迁移到 Kubernetes 上的挑战 Sarah Wells, 运营和可靠性技术总监, 金融时报观看视频 参加 2022 年 10 月 24-28 日的北美 KubeCon 参加 2023 年 4 月 17-21 日的欧洲 KubeCon Kubernetes 特性 自动化上线和回滚 Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。 服务发现与负载均衡 无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。 存储编排 自动挂载所选存储系统,包括本地存储、诸如 AWS 或 GCP 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Ceph、Cinder 这类网络存储系统。 Secret 和配置管理 部署和更新 Secret 和应用程序的配置而不必重新构建容器镜像, 且不必将软件堆栈配置中的秘密信息暴露出来。 自动装箱 根据资源需求和其他限制自动放置容器,同时避免影响可用性。 将关键性的和尽力而为性质的工作负载进行混合放置,以提高资源利用率并节省更多资源。 批量执行 除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。 IPv4/IPv6 双协议栈 为 Pod 和 Service 分配 IPv4 和 IPv6 地址 水平扩缩 使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。 自我修复 重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。 为扩展性设计 无需更改上游源码即可扩展你的 Kubernetes 集群。 案例分析 "https://kubernetes.io/zh-cn/

【k8s】(一) 使用kubeadm快速部署一个K8s集群_第1张图片

 

​ 1、kubernetes,简称 K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多
个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效(powerful),Kubernetes
提供了应用部署,规划,更新,维护的一种机制。

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

(1)创建一个 Master 节点
    kubeadm init

(2)将一个 Node 节点加入到当前集群中
    kubeadm join 

二、硬件要求

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

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

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

(3)可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点

(4)禁止swap分区

三、环境准备与规划

1、集群规划

node1   192.168.215.140   (master)

node2   192.168.215.141   (slave) 

node3   192.168.215.142   (slave)


2、必要环境准备(3台都执行)

(1) 都关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

(2) 都关闭selinux
setenforce 0  # 临时
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久


(3) 都关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

(4) 根据规划设置主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3

(5) 只在master140添加hosts
cat >> /etc/hosts << EOF
192.168.215.140 node1
192.168.215.141 node2
192.168.215.142 node3
EOF

(6) 三台服务器,将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

(7) sysctl --system  # 生效

(8) 时间同步
yum install ntpdate -y
ntpdate time.windows.com

(9) 重启所有服务器

四、安装docker并添加yum源

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

4.1 安装docker

3台都需要安装docker

1、使用wget命令下载docker-ce.repo

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

2、安装docker18.06.1版本

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

3、设置开机自启,并启动docker

    systemctl enable docker && systemctl start docker

4、查看docker版本

    docker --version

4.2 设置docker镜像仓库地址

  设置docker镜像仓库地址为:阿里巴巴的地址,加速镜像下载

3台都需要设置仓库地址

1、创建文件夹

    sudo mkdir -p /etc/docker

2、替换镜像仓库地址
 
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://p4e9di9t.mirror.aliyuncs.com"]
    }
    EOF

3、重启docker

    systemctl daemon-reload
 
    systemctl restart docker

4.3 设置k8s的YUM源

3台都执行

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

五、安装kubeadm,kubelet和kubectl

1、安装指定版本的1.18,避免兼容性问题

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

2、设置开机自启

    systemctl enable kubelet

六、部署K8s Master

6.1 kubeadm初始化并下载镜像

1、在192.168.215.140(Master)执行。

2、service-cidr 和 pod-network-cidr 只要是和当前网段不冲突的ip就可以。

3、由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
kubeadm init \
  --apiserver-advertise-address=192.168.215.140 \
  --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

 6.2 复制配置文件,并授权 

在 140 master上面继续执行

mkdir -p $HOME/.kube

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

sudo chown $(id -u):$(id -g) $HOME/.kube/config

   6.3 查看节点

kubectl get nodes

发现只有master一个节点,并且状态是 “未准备”

【k8s】(一) 使用kubeadm快速部署一个K8s集群_第2张图片

七、部署K8s Slave

  把从节点加入到master当中去,从而组成一个集群,所以接下来的操作基本都是在141/142 从节点上面执行的。

7.1 master生成token

在140 master 节点上面执行如下命令,生成token,从而让其他节点加入进来,默认24h有效

kubeadm token create --print-join-command

 7.2 从节点加入master

复制master上面生成的命令,在从节点141/142上面分别执行:

kubeadm join 192.168.215.140:6443 --token bycusu.59ms8jd3eq24762t     --discovery-token-ca-cert-hash sha256:27beb79651247a57b6272f27f6e2c6d64085a2130b0103387e4cf0cd2e85e167 

 7.3 再次查看节点

kubectl get nodes

在master上面执行该命令,发现节点数量增加了2个

【k8s】(一) 使用kubeadm快速部署一个K8s集群_第3张图片

八、部署CNI网络插件

 1、在master上面执行该命令,需要等待5-10分钟,若失败,多执行几次

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml   


 2、查看详细系统状态 ,需要每个是Running

    kubectl get pods -n kube-system 


 3、查看节点状态,每个node都是reaady

     kubectl get nodes

【注】当2和3都是running与ready状态表示cni网络插件已经安装完成

【k8s】(一) 使用kubeadm快速部署一个K8s集群_第4张图片

九、测试K8s集群

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

 1、kubectl create deployment nginx --image=nginx 

 2、kubectl get pod,svc   查看状态是否为running,然后执行第3步暴露端口

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

 4、kubectl get pod,svc   查看映射端口是多少

   访问地址:http://192.168.215.140:32491

【k8s】(一) 使用kubeadm快速部署一个K8s集群_第5张图片 【k8s】(一) 使用kubeadm快速部署一个K8s集群_第6张图片

【k8s】(一) 使用kubeadm快速部署一个K8s集群_第7张图片

十、卸载k8s

kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum remove kube*

你可能感兴趣的:(6,kubernetes)