k8s 集群安装
文章目录
- kubeadm
- 前置要求
- 部署步骤
- 环境准备
- 准备工作
- linux更改配置操作
- 安装Docker kubeadm kubelet kubectl
- 部署 k8s-master
- 作者声明
kubeadm
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署
1 | # 创建一个 Master 节点 |
前置要求
一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止 swap 分区
部署步骤
- 在所有节点上安装 Docker 和 kubeadm
- 部署 Kubernetes Master
- 部署容器网络插件
- 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
- 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源
环境准备
准备工作
- 我们可以使用 vagrant 快速创建三个虚拟机。虚拟机启动前先设置 virtualbox 的主机网
络。现全部统一为 192.168.56.1,以后所有虚拟机都是 56.x 的 ip 地址
创建虚拟机的vagrant文件如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Vagrant.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是为了本机连接方便
- 设置虚拟机存储目录,防止硬盘空间不足
管理->全局设定 - 进入刚刚的Vagrant文件目录 进行安装 命令vagrant up
- 其实 vagrant 完全可以一键部署全部 k8s 集群。
https://github.com/rootsongjc/kubernetes-vagrant-centos-clusterhttps://github.com/rootsongjc/kubernetes-vagrant-centos-cluster
http://github.com/davidkbainbridge/k8s-playgroundhttp://github.com/davidkbainbridge/k8s-playground - 进入三个虚拟机,开启 root 的密码访问权限。
1
2#cmd中连接
vagrant ssh XXX 进去系统之后
1 | #切换root用户 |
1 | #编辑配置 |
- 利用xshell进行连接
ip 192.168.56100-102
用户名为root
密码为vagrant
linux更改配置操作
1 | #查看网卡 |
由于网卡ip一样,所以创建NAT网络网卡
全局设定->网络->右上角添加
为每一个结点设置NAT网络测试NAT是否设置成功
1
2
3
4
5
6
7
8#查看使用的网卡 例如我的是eth0
#查看每个节点的ip eth0地址
ip addr
#互相ping
ping ip
#再ping 百度
ping www.baidu.com
#如果都ping成功则配置成功关闭防火墙
1
2systemctl stop firewalld
systemctl disable firewalld关闭linux 安全策略 selinux
1
2
3
4
5
6#查看配置
cat /etc/selinux/config
#禁用
sed -i 's/enforcing/disabled/' /etc/selinux/config
#进全局
setenforce 0关闭内存交换 swap
1
2
3
4
5
6#临时的
swapoff -a
#配置永久的
sed -ri 's/.*swap.*/#&/' /etc/fstab
#查看配置
cat /etc/fstab添加主机名与 IP 对应关系
1
2
3
4
5
6
7vi /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将桥接的 IPv4 流量传递到 iptables 的链:
1
2
3
4
5
6cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#系统应用
sysctl --system
安装Docker kubeadm kubelet kubectl
安装 docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#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 docker添加阿里云 yum 源
1
2
3
4
5
6
7
8
9
10cat > /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安装 kubeadm,kubelet 和 kubectl
1
2
3
4yum list|grep kube
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet
部署 k8s-master
- master 节点初始化
将k8s文件夹上传到虚拟机 进入目录 (文件 参考我的gulimall gitee文档下)1
2
3
4
5#对master_images.sh修改权限
chomd 700 master_images.sh
#执行下载
./master_images.sh
#检查镜像是否下载完成 docker images
下载完成后进行初始化
1 | #apiserver-advertise-address=主机上网ip |
成功后要执行以下两个步骤
科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
拉取可能失败,需要下载镜像。
运行完成提前复制:加入集群的令牌
测试 kubectl(主节点执行)
1
2
3mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config安装 Pod 网络插件(CNI)
1
2kubectl apply -f \
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
以上地址可能被墙,大家获取上传我们下载好的 flannel.yml 运行即可(参考gulimall gitee 文档),同时 flannel.yml 中
1 | #由于制定好了flannel.yml文件所以只需要执行 安装 |
指定的 images 访问不到可以去 docker hub 找一个
wget yml 的地址
vi 修改 yml 所有 amd64 的地址都修改了即可。
等待大约 3 分钟
1 | kubectl get ns #查看名称空间 |
网络成功状态
$ ip link set cni0 down 如果网络出现问题,关闭 cni0,重启虚拟机继续测试
- 目前 master 状态为 notready。等待网络加入完成即可。
1
kubectl get nodes #在master节点获取所有节点
节点状态为ready 再往里加入其他节点
1 | journalctl -u kubelet #查看 kubelet 日志 |
token两个小时会过期
其他每一个节点加入master 节点
1 | kubeadm join 10.0.2.15:6443 --token hvlfqz.flbrb9ljn5i2bn3l \ |
执行 watch kubectl get pod -n kube-system -o wide 监控 pod 进度
等 3-10 分钟,完全都是 running 以后继续
Ctrl+C退出监控
最终所有节点都变为Ready状态即成功
作者声明
1 | 如有问题,欢迎指正! |