kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署
# 创建一个 Master 节点
$ kubeadm init
# 将一个 Node 节点加入到当前集群中
$ kubeadm join <Master 节点的 IP 和端
一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止 swap 分区
Vagrant.configure("2") do |config|
(1..3).each do |i|
config.vm.define "k8s-node#{i}" do |node|
#设置虚拟机的Box
node.vm.box_url = "https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box"
node.vm.box="centos/7"
#设置虚拟机的主机名
node.vm.hostname="k8s-node#{i}"
#设置虚拟机的IP
node.vm.network "private_network",ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"
#VirtaulBox相关配置
node.vm.provider "virtualbox" do |v|
v.name="k8s-node#{i}"
v.memory=4096
v.cpus=4
end
end
end
end
配置网络 virtualbox ->管理->主机网络管理器
最终虚拟机有两个网卡
网卡1真正联网
网卡2是为了本机连接方便
#cmd中连接
vagrant ssh XXX 进去系统之后
#切换root用户
su root 密码为 vagrant
#编辑配置
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes/no
重启服务 service sshd restart
#查看网卡
ip route show
#查看使用的网卡 例如我的是eth0
#查看每个节点的ip eth0地址
ip addr
#互相ping
ping ip
#再ping 百度
ping www.baidu.com
#如果都ping成功则配置成功
systemctl stop firewalld
systemctl disable firewalld
#查看配置
cat /etc/selinux/config
#禁用
sed -i 's/enforcing/disabled/' /etc/selinux/config
#进全局
setenforce 0
#临时的
swapoff -a
#配置永久的
sed -ri 's/.*swap.*/#&/' /etc/fstab
#查看配置
cat /etc/fstab
vi /etc/hosts
10.0.2.15 k8s-node1
10.0.2.4 k8s-node2
10.0.2.5 k8s-node3
指定hostname
hostnamectl set-hostname <newhostname>:指定新的 hostnam
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#系统应用
sysctl --system
#1. 卸载系统之前的 docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2.安装 Docker-CE
#安装必须的依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
#设置 docker repo 的 yum 位置
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 docker,以及 docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io
#3、配置 docker 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://90iechnf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#4、启动 docker & 设置 docker 开机自启
systemctl enable docke
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
yum list|grep kube
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet
#对master_images.sh修改权限
chomd 700 master_images.sh
#执行下载
./master_images.sh
#检查镜像是否下载完成 docker images
下载完成后进行初始化
#apiserver-advertise-address=主机上网ip
#由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。可以手动按照我们的 images.sh 先拉取镜像,地址变为 registry.aliyuncs.com/google_containers 也可以。
#pod是最小的部署单元
#service 对pod提供负载均衡 是多个pod的组合
kubeadm init \
--apiserver-advertise-address=10.0.2.15 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.17.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
成功后要执行以下两个步骤
科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
拉取可能失败,需要下载镜像。
运行完成提前复制:加入集群的令牌
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f \
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
以上地址可能被墙,大家获取上传我们下载好的 flannel.yml 运行即可(参考gulimall gitee 文档),同时 flannel.yml 中
#由于制定好了flannel.yml文件所以只需要执行 安装
kubectl apply -f kube-flannel.yml
#删除命令为
kubectl delete -f kube-flannel.yml
指定的 images 访问不到可以去 docker hub 找一个
wget yml 的地址
vi 修改 yml 所有 amd64 的地址都修改了即可。
等待大约 3 分钟
kubectl get ns #查看名称空间
kubectl get pods -n kube-system #查看指定名称空间的 pods
kubectl get pods --all-namespaces #查看所有名称空间的 pods
网络成功状态
$ ip link set cni0 down 如果网络出现问题,关闭 cni0,重启虚拟机继续测试
kubectl get nodes #在master节点获取所有节点
节点状态为ready 再往里加入其他节点
journalctl -u kubelet #查看 kubelet 日志
token两个小时会过期
其他每一个节点加入master 节点
kubeadm join 10.0.2.15:6443 --token hvlfqz.flbrb9ljn5i2bn3l \
--discovery-token-ca-cert-hash sha256:04e66bbbe8db1c587042128531431388f4a5444a8cbea7bab4d6e64cdce5093a
执行 watch kubectl get pod -n kube-system -o wide 监控 pod 进度
等 3-10 分钟,完全都是 running 以后继续
Ctrl+C退出监控
最终所有节点都变为Ready状态即成功
如有问题,欢迎指正!