Kubeadm搭建kubernetes环境
Kubeadm搭建kubernetes环境K8S学习笔记kubeadm 介绍1.1 概述Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。kubeadm 只关心启动集群,而不关心其他工作,如部署前的节点准备工作、安装各种Kub
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
更多推荐
所有评论(0)