前言
k8s集群介绍
k8s 一个开源的用于编排云平台中多个主机上的容器化的应用,目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署,规划,更新,维护的一种机制。
master:k8s集群的控制节点,负责整个集群的决策调度,发现和响应集群的事件
node:k8s集群的工作节点
pod:在k8s集群中,一个pod是一组共享网络和存储的容器。pod中的容器都是统一进行统一调度,并且运行在共享上下文中,一个pod被定义为一个逻辑的host,它包括一个或多个相对耦合的容器。
环境搭建
环境准备
1、三台操作系统为CentOS7的虚拟机(VM),分别代替master、node1、node2
2、硬件配置:2GB或更多,2个CPU或更多,硬盘30GB或更多
3、最好能访问外网,以防后续部署CNI网络插件报错
4、docker版本:docker-ce-18.06.1.ce-3.el7
5、k8s版本:1.18.0
开始搭建
1、配置静态IP
#这只是一个栗子,虚拟机选择的是桥接网络,三台机器的ip应该和自己主机的ip在同一个网段
#需要自己去网络设置去进行修改
master:192.168.8.106
node1:192.168.8.107
node2:192.168.8.108#设置完后可以检查一下配置文件
#获取ip
ip addr
cat /etc/sysconfig/network-scripts/ifcfg-ens33#配置和这个一样
#如果不一样就用vi改一下
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #注意这
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="dadd094d-8f0d-40f1-9ebb-69ada08bdcdb"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.8.106 #这是对应主机配置的IP
NETMASK=255.255.255.0
GATEWAY=192.168.8.1
DNS1=8.8.8.8
DNS2=114.114.114.114
配置网络相关操作(以master节点为例,node1/2是一样的操作)记得配置完重启
2、设置主机名
#修改hostname
hostnamectl set-hostname master #master节点hostnamectl set-hostname node1 #node1节点
hostnamectl set-hostname node2 #node2节点
#查看修改结果
hostnamectl status
3、设置hosts
#修改host (每个节点都需要进行该操作)
cat <<EOF >>/etc/hosts
192.168.8.106 master
192.168.8.107 node1
192.168.8.108 node2
EOF#遇到问题-开始不是root权限,修改失败,用下面命令切换到root权限
su -#查看是否修改成功
cat /etc/hosts#配置好之后,可以进行互ping,看是否能正常访问
4、安装docker
#遇到的问题
#1、时间同步
ntpdate times.aliyun.com #报错就用下面两条指令timedatectl status #查看当前的时间地区
timedatectl set-timezone Asia/Shanghai #设置为时区为上海#2、镜像问题
#打开查看修改镜像配置文件
nano /etc/yum.repos.d/CentOS-Base.repo
#镜像配置 将原有的全部替换为国内源的,以防访问不到
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7# 安装docker所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里云的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 指定安装这个版本的docker-ce
yum -y install docker-ce-18.06.1.ce-3.el7
# 启动docker
systemctl enable docker && systemctl start docker
# 查看docker的版本看是否成功安装
docker --version#查看docker是否已启动
systemctl status docker
#如果没有启动,会看到inactive#配置docker镜像
nano /etc/docker/daemon.json
#输入以下内容
{
"registry-mirrors": ["https://docker.m.daocloud.io","https://p5lmkba8.mirror.aliyuncs.com","https://registry.docker-cn.com"]
}
5、修改默认配置
#关闭防火墙
systemctl disable firewalld #禁用防火墙服务
systemctl stop firewalld #停止防火墙服务# 关闭selinux
# 临时禁用selinux
setenforce 0
# 方法一 若是检查SELinux状态不为disabled 采取方法二
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#sed是一个流编辑器,用于对文件进行文本替换
#-i 选项表示直接修改文件内容,而不是将结果输出到终端
#第一个命令禁用SELinux配置文件/etc/sysconfig/selinux中的SELinux设置,针对的是permissive模式。
#第二个命令禁用 /etc/selinux/config 配置文件的SELinux配置,针对的是enforcing模式#检查SELinux状态
sestatus# 方法二
# 编辑 /etc/selinux/config
nano /etc/selinux/config
# 找到SELINUX=enforcing将其改为SELINUX=disabled
# 保存退出并重启
reboot
# 再检查其状态# 禁用交换分区
swapoff -a
# 永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
# 验证交换分区是否禁用
free -h #若已禁用,swap部分的大小为0# 修改内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
6、配置k8s
# 执行配置k8s阿里云源
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# 安装Kubernetes 组件 kubeadm、kubectl、kubelet
# 版本有问题,最后试1.18.0可以
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 启动kubelet服务
systemctl enable kubelet
systemctl start kubelet#初始化k8s集群 在master节点上
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --apiserver-advertise-address 192.168.8.106 --pod-network-cidr=10.244.0.0/16 --token-ttl 0
#初始化完成后,会显示一条命令
#kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
#记住这条命令,它会在稍后用于将worker节点加入集群# 上面安装完成后,如果部署成功,k8s会提示你输入如下命令,执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config#使用kubectl命令来管理Kubernetes集群
kubectl get nodes
#此时会看到master节点处于NotReady状态#加入worker节点
kubeadm join 192.168.8.106:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>#部署网络插件(每个节点都得执行此命令)
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#确保虚拟机可以访问该链接(主机可以翻墙,虚拟机网络为桥接模式,和主机在一个网络段)#在任意节点使用 kubectl 命令
#将master节点中/etc/kubernetes/admin.conf文件拷贝到需要运行的服务器的/etc/kubernetes目录下
scp root@master:/etc/kubernetes/admin.conf /etc/kubernetes
#在对应的服务器上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bashrc
source ~/.bashrc
#验证
kubectl get po,svc#启用网络插件,在每个节点都执行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#calico安装后验证是否已成功部署
kubectl get pods -n kube-system
#查看calico相关的pods是否处于running状态#检查节点状态
kubectl get nodes
#此时,master和worker节点应该处于ready状态
如图:
7、服务部署
# 简单部署一个 Nginx 服务用于测试 Kubernetes 集群,通过访问 (IP:暴露的端口) 得到 Nginx 的页面则说明服务部署成功。
# 创建部署
kubectl create deployment nginx --image=nginx
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看 pod 以及服务信息
kubectl get pod,svc
部署成功如图:
总结
在 Kubernetes 部署过程中,我遇到了许多问题,比如网络问题、Master 节点初始化失败、版本不兼容等。不过,通过查阅资料和向 AI 求助,最终还是成功完成了部署,感觉还是很开心的。所以,我想将我的部署过程与大家分享,希望能对大家有所帮助。
原文始发于微信公众号(德斯克安全小课堂):云攻防——「k8s部署(超超超详细版)」
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论