kubeadm安装kubernetes
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。 这个工具能通过两条指令完成一个 kubernetes 集群的部署:
$ kubeadm init 创建一个master节点
$ kubeadm join 将一个 Node 节点加入到当前集群中
试验背景
在学习k8s搭建中,网上大部分教程都是用虚拟机做集群,只有极少数是使用服务器搭建教程,用云服务器的更少。
试验环境
这里准备了三台服务器进行测试
110.42.149.60 master 阿里云 2H4G CentOS7.6
42.193.254.253 node1 阿里云 2H4G CentOS7.6
69.165.74.251 node2 阿里云 2H4G CentOS7.6
是干净的系统刚开通的环境
安装集群版本 1.23.1
1 前置
1 所有节点上安装 docker kubeadman kubelet、kubectl 而且这三个版本要统一
docker 运行时容器 kubeadman 快速安装k8s的工具
kubectl 命令行操作节点 kubelet node节点的代理 来进行干活创建pod 管理网络
2 修改主机名 hosts配置 master节点 就用master node节点 就用node
hostnamectl 检测主机名
vim /etc/hosts
本机内网ip的名字改为master/node
3 关于防火墙如果使用的云服务器就不用管他
2 安装 前置软件
docker
touch docker.sh
#!/bin/bash
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mkdir -p /etc/docker && touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<END
{
"registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
END
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
chmod +x docker.yml && ./docker.yml
kubeadman kubelet、kubectl
kubeadman kubelet kubectl 指定版本 最好版本统一和kubernetes的版本统一
1 添加yum 源
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
2 安装
yum install -y kubelet-1.23.1-0 kubeadm-1.23.1-0 kubectl-1.23.1-0
3 查看是否安装成功
kubectl version
kubelet --version
kubeadm version
4 设置开机自启
systemctl restart kubelet
3 master主节点
1 修改hosts文件
这里的ip 都要可以ping通 最好用这个内网ip 要和etho的那个保持一致
vim /etc/hosts
110.42.149.60 master
42.193.254.253 node
169.165.74.251 node
2 下载镜像
如果网络不好 下载镜像可能就下载不下来,提前把镜像下载下来
编写一个脚本文件 自己先下载
vim master_images.sh
#!/bin/bash
images=(
kube-apiserver:v1.17.3
kube-proxy:v1.17.3
kube-controller-manager:v1.17.3
kube-scheduler:v1.17.3
coredns:1.6.5
etcd:3.4.3-0
pause:3.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
done
chmod 700 master_images.sh 赋予权限
./master_images.sh 开始执行
下载好的镜像
3 开始初始化master节点
kubeadm init \
--apiserver-advertise-address=120.77.82.244 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1-0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
kubeadm init \ 设置主节点 的ip就是你的公网ip需要写的hosts文件里
--kubernetes-version=1.23.1 指定k8s的版本
--apiserver-advertise-address=自己的ip 因为k8s的所有操作命令都要经过 apiserver 并设置主节点的地址
如果是使用云服务器 这个参数就去掉
--kubernetes-version 指定版本
--image-repository 默认是从k8s.io 现在改成阿里云的
service-cidr=10.96.0.0/16 \ 对不同节点 pod 之间网络的访问 ,集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr=10.244.0.0/1 所在的ip pod和 pod 之间 与下面部署的CNI网络组件yaml中保持一致
4 使用阿里云搭建k8s时,在主节点执行kubeadm init时候卡在
Waiting for the kubelet to boot up the control plane a