云原生|kubernetes-kubeadm部署k8s集群(超详细)(代码片段)

author author     2022-12-04     592

关键词:

Kubeadm 是 kubernetes 社区为了方便普通用户学习k8s,发起的一个简单上手的部署工具。不用把大量时间花费在搭建集群上面。

只需通过两条命令就可以部署一个k8s集群

#创建一个Master节点
$ kubeadm init

# 将一个Node节点加入到当前集群中
$ kubeadm join

安装Kubeadm

实验环境:CentOS7.9

前期准备

  • 确认linux内核版本在3.10以上
  • 确认Cgroups模块正常
  • 确认kubernetes的默认工作端口没有被占用

环境准备(所有机器下操作这一步骤)

  • 在所有节点上同步/etc/hosts
[root@master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 master
192.168.100.20 slave1
192.168.100.30 slave2
  • 在所有节点上配置防火墙和关闭selinux
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
  • 在所有节点上关闭swap分区,
[root@master ~]# sed -i /swap/s/UUID/#UUID/g /etc/fstab
[root@master ~]# swapoff -a  ##临时关闭
  • 在所有节点配置好yum源
[root@master ~]# wget -c  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master ~]#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
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
  • 在所有节点上安装并启动docker,并设置开机自启
#选择自己想要的版本
[root@master ~]# yum list  docker-ce --showduplicates|grep "^doc"|sort -r
docker-ce.x86_64            3:20.10.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.8-3.el7                    @docker-ce-stable
docker-ce.x86_64            3:20.10.3-3.el7                    docker-ce-stable
[root@master ~]# yum -y install docker-ce-20.10.8-3.el7
[root@master ~]# systemctl enable docker && systemctl start docker

查看确认Docker是否安装成功

[root@master ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.18
 API version:       1.41
 Go version:        go1.18.6
 Git commit:        b40c2f6
 Built:             Thu Sep  8 23:14:08 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
  • 在所有节点设置内核参数(云主机略)
[root@master ~]# cat <<EOF >  /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@master ~]# sysctl -p   #让其生效
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@master ~]# 

注意:如果发现如下错误

#sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables:没有那个文件或目录
#sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables:没有那个文件或目录
#net.ipv4.ip_forward = 1

可通过modrobe br_netfilter 解决,会自动加载br_netfilter模块

  • 在所有节点安装软件包
[root@master ~]# yum install -y kubelet-1.21.0-0 kubeadm-1.21.0-0 kubectl-1.21.0-0  --disableexcludes=kubernetes

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
·······


Complete!
[root@master ~]# systemctl restart kubelet ; systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

部署Kubernetes

master节点

通过kubeadm查看所需的镜像

[root@master ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.21.14
k8s.gcr.io/kube-controller-manager:v1.21.14
k8s.gcr.io/kube-scheduler:v1.21.14
k8s.gcr.io/kube-proxy:v1.21.14
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0

拉取镜像

默认的gcr镜像我们是无法之间访问的,我们可以从阿里镜像获取,

#!/bin/bash
image_name=(
        kube-apiserver:v1.21.14
        kube-controller-manager:v1.21.14
        kube-scheduler:v1.21.14
        kube-proxy:v1.21.14
        pause:3.4.1
        etcd:3.4.13-0
        coredns:v1.8.0
   ) 
aliyun_registry="registry.aliyuncs.com/google_containers/"
 
for image in $image_name[@];do
    docker pull $aliyun_registry$image
    echo "###########################################################################"
done

docker tag  registry.aliyuncs.com/google_containers/coredns:v1.8.0  registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
exit

Docker配置cgroup-driver

修改Docker配置文件,然后加载配置并重新启动Docker

 vim /etc/docker/daemon.json

  "exec-opts": ["native.cgroupdriver=systemd"]

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker

部署

现在在master上执行初始化操作

[root@master ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16 

这里我们master节点已经安装成功,

根据提示运行下列命令

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf

slave节点

配置slave加入集群

下面的步骤是把slave1和slave2以worker的身份加入到kubernetes集群。

  • 在slave1和slave2分别执行。
kubeadm join 192.168.100.10:6443 --token 8xey01.o9twtamnm2tdivoe \\
        --discovery-token-ca-cert-hash sha256:0d2cf7a10b54aeb91edbfabb501655f99ea9c64b96cb81dbc07573e363fab43c 

部署网络插件

安装calico

[root@master ~]#  kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/tigera-operator.yaml
[root@master ~]# curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/custom-resources.yaml

需要更改默认 IP 池 CIDR 以匹配您的 pod 网络 CIDR。然后部署,默认在calico-system命名空间

[root@master ~]# vi custom-resources.yaml 
··········
cidr: 192.168.0.0/16 替换为  cidr: 10.244.0.0/16  
··········
[root@master ~]# kubectl apply -f custom-resources.yaml 
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default created

查看其状态

[root@master ~]# kubectl get po -n calico-system
NAME                                       READY   STATUS     RESTARTS   AGE
calico-kube-controllers-78687bb75f-62zrs   1/1     Running    0          7m48s
calico-node-78sqm                          1/1     Running    0          7m49s
calico-node-f7wb6                          1/1     Running    0          7m49s
calico-node-s7qm3                          1/1     Running    0          7m49s
calico-typha-84cfb44987-vbrq9              1/1     Running    0          7m49s
csi-node-driver-4dn68                      2/2     Running    0          4m21s

可以使用 kubectl get 命令来查看当前节点的状态

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   8m   v1.21.0
slave1   Ready    <none>                 11m   v1.21.0
slave2   Ready    <none>                 11m   v1.21.0

查看组件健康情况

[root@master ~]# kubectl get cs
NAME                 STATUS      MESSAGE                                                                                       ERROR
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused   
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused   
etcd-0               Healthy     "health":"true" 

这里提示我们schedulercontroller-manager不健康的,我们先查看下其服务端口是否正常

[root@master ~]# netstat -ntpl | grep contro
tcp        0      0 127.0.0.1:10257         0.0.0.0:*               LISTEN      3197/kube-controlle 

[root@master ~]# netstat -ntpl | grep scheduler
tcp        0      0 127.0.0.1:10259         0.0.0.0:*               LISTEN      3313/kube-scheduler 

我们发现这两个服务都正常运行,只不过检测端口不一致,

解决问题

[root@master ~]# kubectl edit po kube-controller-manager-master -n kube-system

········
	- --port=0        ###注释掉或删除此行,scheduler同样操作,edit 时需要确认,pod的名称

再次查看组件,一切正常

[root@master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   "health":"true"  

这里我们的集群部署就结束了

『云原生·docker』docker中部署nginx(代码片段)

...主要分为以下六大部分,正在更新中,尽请期待!『云原生·生之门』『云原生·前置知识』『云原生·Docker』『云原生·Kubernetes』『云原生·KubeSphere』『云原生·DevOps』🚩点击关注本专栏提示:已经更新的或正在更新的... 查看详情

云原生之docker容器安装以及入门docker部署web应用&&云原生基石

一.前言1.1Docker是什么?Docker是一个应用打包、分发、部署的工具。基本就是一个轻量的虚拟机。虚拟机里只有我们需要的东西,其他多余的东西是必要的。我们看下图,来看一下它和普通的虚拟机对比图:如下:1.2打包、分发、... 查看详情

云原生之docker实战使用docker部署kodbox私有云

【云原生之Docker实战】使用docker部署kodbox私有云一、kodbox介绍1.kodbox简介2.kodbox功能与特点二、检查本地docker状态1.检查docker版本2.检查docker状态三、安装kodbox1.创建安装目录2.编辑docker-compose.yaml脚本3.创建相关容器4.查看容器状态... 查看详情

云原生之使用docker部署ansible管理平台ansiblesemaphore

云原生之使用docker部署Ansible管理平台AnsibleSemaphore一、AnsibleSemaphore介绍二、检查本地docker环境1.检查docker版本2.检查docker状态3.检查dockercompose版本三、下载semaphore镜像四、编辑docker-compose.yaml文件1.创建数据目录2.编辑docker-compose.yam... 查看详情

spinnaker:云原生多云环境持续部署的未来

...告指出,到2020年,将有50%的传统老旧应用会以云原生的方式被改造,到2022年,云原生和容器化的普及率将达到75%。随着2020KubeCon线上大会的结束,我们发现企业拥抱云原生、Kubernetes和Istio的热情空前高涨,... 查看详情

云原生之docker实战使用docker部署cloudreve公有云文件系统

【云原生之Docker实战】使用Docker部署Cloudreve公有云文件系统一、Cloudreve介绍1.Cloudreve简介2.Cloudreve特点二、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding4.检查Docker版本三、检查宿主机系统版本四、安... 查看详情

云原生之docker实战部署轻量级容器云管理平台humpback

【云原生之Docker实战】部署轻量级容器云管理平台Humpback一、Humpback介绍1.Humpback简介2.Humpback特点二、检查docker环境1.检查docker状态2.检查docker版本三、安装docker-compose1.下载docker-compose二进制包2.给文件增加执行权限3.检查docker-compos... 查看详情

云原生之docker实战使用docker部署部署doclever开源接口管理平台

【云原生之Docker实战】使用Docker部署部署DoClever开源接口管理平台一、DoClever介绍1.DoClever简介2.DOClever开发语言3.DOClever特点二、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding4.检查Docker版本三、检查宿... 查看详情

前端走进云原生,k8s部署助力项目上云(代码片段)

 一、云原生云原生是面向云应用设计的一种全新架构理念,是充分发挥云效能的最佳实践路径,可以帮助企业构建弹性可靠、松耦合、易管理可观测的应用系统,提升关键应用的交付效率,降低系统的运维复杂度。云原生是一种文化... 查看详情

前端走进云原生,k8s部署助力项目上云(代码片段)

 一、云原生云原生是面向云应用设计的一种全新架构理念,是充分发挥云效能的最佳实践路径,可以帮助企业构建弹性可靠、松耦合、易管理可观测的应用系统,提升关键应用的交付效率,降低系统的运维复杂度。云原生是一种文化... 查看详情

云原生之docker实战使用docker部署webssh工具

【云原生之Docker实战】使用docker部署webssh工具一、webssh介绍二、检查服务器系统版本三、检查本地docker环境1.检查docker服务状态2.检查docker版本四、安装docker-compose1.下载docker-compose二进制包2.给文件增加执行权限3.检查docker-compose... 查看详情

云原生之使用docker部署postgresql数据库(代码片段)

云原生之使用docker部署Postgresql数据库一、Postgresql介绍1.PostgreSQL简介2.PostgreSQL的特点二、检查本地docker环境1.检查系统版本2.检查docker版本3.检查docker状态三、下载Postgresql镜像四、部署Postgresql数据库1.创建Postgresql容器2.查看Postgresq... 查看详情

云原生之docker实战使用docker部署pingvinshare文件共享平台

【云原生之Docker实战】使用docker部署PingvinShare文件共享平台一、PingvinShare介绍1.PingvinShare简介2.PingvinShare特点二、检查本地docker环境1.检查docker版本2.检查docker状态3.检查dockercompose版本三、下载PingvinShare镜像四、docker-cli部署PingvinSh... 查看详情

云原生之存储实战部署ceph分布式存储集群

【云原生之存储实战】部署Ceph分布式存储集群一、Ceph介绍1.Ceph简介2.Ceph的特点3.Ceph适用场景4.Ceph与云原生5.Ceph在k8s中的应用二、环境规划三、环境配置工作1.环境配置说明2.配置host文件3.配置ssh免密4.配置yum仓库5.关闭selinux和fire... 查看详情

云原生之docker实战使用docker部署ghost个人博客系统

【云原生之Docker实战】使用docker部署Ghost个人博客系统一、Ghost介绍二、检查docker环境1.检查docker版本2.检查docker状态3.检查dockercompose版本四、下载ghost镜像1.dockerhub下载镜像2.个人镜像仓库下载镜像五、使用docker-cli部署Ghost六、使... 查看详情

云原生之docker实战在docker环境部署answer问答平台

【云原生之Docker实战】在Docker环境部署Answer问答平台一、Answer介绍二、检查本地Docker环境1.检查本地Docker版本2.检查Docker状态3.检查dockercompose版本三、下载Answer镜像四、部署Answer应用1.创建部署目录2.编辑docker-compose.yaml文件3.创建A... 查看详情

云原生之使用docker部署webssh工具sshwifty(代码片段)

云原生之使用Docker部署webssh工具sshwifty一、sshwifty介绍1.sshwifty简介2.shwifty特点二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载sshwifty镜像四、服务器生成凭证文件五、创建sshwifty容器1.创建部署目录2.创建sshwifty容器3.... 查看详情

云原生之kubernetes实战在k8s环境下部署kubegems云管理平台

【云原生之kubernetes实战】在k8s环境下部署KubeGems云管理平台一、KubeGems介绍1.KubeGems简介2.KubeGems特点3.KubeGems产品生态二、检查本地k8s环境1.检查工作节点状态2.检查系统pod状态三、安装KubeGemsInstaller控制器1.KubeGemsInstaller介绍2.创建... 查看详情