Kubeadm搭建kubernetes环境

Kubeadm搭建kubernetes环境


kubeadm 介绍

1.1 概述

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

kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。kubeadm 只关心启动集群,而不关心其他工作,如部署前的节点准备工作、安装各种Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不属于 kubeadm 关注范围。

1.2 kubeadm功能

  • kubeadm init 启动一个 Kubernetes 主节点;
  • kubeadm join 启动一个 Kubernetes 工作节点并且将其加入到集群;
  • kubeadm upgrade 更新一个 Kubernetes 集群到新版本;
  • kubeadm config 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要对集群做一些配置以便使用 kubeadm upgrade 命令;
  • kubeadm token 管理 kubeadm join 使用的令牌;
  • kubeadm reset 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改;
  • kubeadm version 打印 kubeadm 版本;
  • kubeadm alpha 预览一组可用的新功能以便从社区搜集反馈。

1.3 安装要求

安装bukernetes集群需要满足以下条件:

  • 一台或多台机器,操作系统CentOS 7 .x-86 x64

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

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

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

  • 禁止swap分区

1.4 最终目标

安装docker,kubeamd

#关闭防火墙 第一种暂时关闭,第二种永久关闭
systemctl stop firewalld
systemctl disable firewalld
    
# 关闭selinux 第一种永久关闭,第二种临时关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config

setenforce 0
# 关闭swap分区
swapoff -a 
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 根据规划设置主机名
hostnamectl set-hostname <hostname>
    
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.73.10 master
192.168.73.11 node1
192.168.73.12 node2
EOF
    
# 将桥接的IPV4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system #生效

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
    
* 时间同步如果遇到下载失败可以尝试以下操作
1. vi /etc/sysconfig/network-scripts/ifcfg-ens33 
修改BOOTPROTO=static
添加DNS1=8.8.8.8
   DNS2=8.8.4.4

安装Docker

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 更改为阿里的镜像
cat > /etc/docker/daemon.json << EOF
{
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyun,com"]
}
EOF

添加阿里云YUM软件源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-e17-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和kebectl

阿里推荐方法

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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

视频推荐方法(不推荐使用)

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

systemctl enable kubelet

部署Kubernetes Master

初始化master

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.73.10

配置网络

wget https://docs.projectcalico.org/v3.20/manifests/calico.yaml --no-check-certificate

kubectl apply -f calico.yaml

kubectl get nodes

默认情况下,由于安全原因,集群并不会将pods部署在Master节点上。但是在开发环境下,我们可能就只有一个Master节点,这时可以使用下面的命令来解除这个限制:

kubectl taint nodes --all node-role.kubernetes.io/master-

会输出

node/master untainted

node连接主机

# 获取token
kubeadm token list
# 输出
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
ygelj6.50p47p7hphckce3r   23h         2022-02-15T06:13:18Z   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
# 默认情况下,token的有效期是24小时,如果我们的token已经过期的话,可以使用以下命令重新生成:

kubeadm token create

# 输出
u2mt59.tyqpo0v5wf05lx2q
# 如果我们也没有--discovery-token-ca-cert-hash的值,可以使用以下命令生成:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# 输出
47b805c4dbb5ffef7b730c59dba51209c2f2f33b5ba9fb024633bba6cee71845

node节点运行一下命令(默认端口为6443)

kubeadm join 192.168.73.10:6443 --token ygelj6.50p47p7hphckce3r --discovery-token-ca-cert-hash sha256:47b805c4dbb5ffef7b730c59dba51209c2f2f33b5ba9fb024633bba6cee71845

测试

# 部署一个 Nginx Deployment,包含两个Pod
# https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
kubectl create deployment nginx --image=nginx:alpine
kubectl scale deployment nginx --replicas=2

# 验证Nginx Pod是否正确运行,并且会分配192.168.开头的集群IP
kubectl get pods -l app=nginx -o wide

# 输出如下:
NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
nginx-54458cd494-p8jzs   1/1     Running   0          31s   192.168.1.2   node1   <none>           <none>
nginx-54458cd494-v2m4b   1/1     Running   0          24s   192.168.1.3   node1   <none>           <none>

常用命令:

iptables -F
    
systemctl stop firewalld
systemctl disable firewalld
    
sed -i '/^SELINUX=/s/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
    
# 禁止iptables对bridge数据进行处理
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.conf # 不起作用
sysctl -p  /etc/sysctl.d/k8s.conf #这样可以
    
# 关闭swap
swapoff -a 
sed 's/.*swap.*/#&/' /etc/fstab
 
# 获取阿里的docker-ce源
# 查看docker版本
yum list docker-ce --showduplicates | sort -r
# 安装最新版docker-ce
yum install docker-ce
# 启动docker
systemctl start docker
# 开机自启docker
systemctl enable docker
# 开机自启kubelet并且启动
systemctl enable kubelet && systemctl start kubelet
# 初始化kubeadm 使用阿里镜像源 --apiserver-advertise-address为master节点ip,--kubernetes-version 为k8s版本,--pod-network-cidr和--service-cidr不要轻易更改
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.73.10

参考文章:

https://www.cnblogs.com/yitianyouyitian/p/10143217.html#_label4_4

错误参考:

文档:k8s初始化报错.note
链接:http://note.youdao.com/noteshare?id=07c18072c432174e7b8facdf800b99ab&sub=BFA0C7E7154947CFB7DB026BD7953AF7

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐