k8S之部署安装

kubernetes安装部署#

环境规划#

集群类型#

kubernetes集群类型主要分为一主多从,以及多主多从两种类型

  • 一主多从:一个master对应多个node节点,部署简单但是容易出现单机故障,主要用于测试环境
  • 多主多从:多台master多个node节点,部署繁琐,安全性高,主要用于生产环境

image-20210925234707008

K8S安装方式#

kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包。

  • kubeadm:快速搭建kubernetes集群工具
  • minikube:快速搭建单节点kubernetes工具
  • 二进制包:从官网上下载每个组件二进制包,安装麻烦,但是对理解kubernetes更加有效

环境规划#

主机名称 角色 IP 操作系统 硬件资源
master master 10.1.1.2 CenTOS7.6+ 2G
node1 node1 10.1.1.3 CenTOS7.6+ 2G
node2 node2 10.1.1.4 CenTOS7.6+ 2G

PS:虚拟机内存最好2G起步,亲测1G环境K8S无法完成初始化,2G即可

环境搭建#

版本选择#

Docker kuberadm kubectl kubelet
18.06.3 1.18.0 1.18.0 1.18.0

环境初始化#

关闭安全策略#

Copy
# 默认三台服务器都关闭此处只演示master # 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 关闭selinux需要重启 sed -i 's/enforcing/disabled/' /etc/selinux/config

DNS解析#

Copy
# 默认三台服务器都关闭此处只演示master cat >> /etc/hosts << EOF 10.1.1.2 master 10.1.1.3 node1 10.1.1.4 node2 EOF

时间同步#

Copy
# K8S要求节点之间时间必须一致 因此配置时间同步 # 默认三台服务器都关闭此处只演示master # 安装ntpdate yum install ntpdate -y # 开启ntpdate systemctl start ntpdate.service && systemctl enable ntpdate.service # 时间同步阿里云 ntpdate ntp1.aliyun.com # 系统时间同步硬件 防止系统重启时间被还原 hwclock --systohc # 查看当前时间 date

关闭Swap分区#

Copy
# 关闭swap sed -ri 's/.*swap.*/#&/' /etc/fstab

添加网桥过滤与地址转发功能#

Copy
# 在每个节点上将桥接的IPv4流量传递到iptables的链 # 默认三台服务器都需要此处只演示master cat > /etc/sysctl.d/kubernetes.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF # 加载配置 sysctl -p # 加载br_netfilter模块 modprobe br_netfilter # 添加开机自启动 echo modprobe br_netfilter >> /etc/rc.d/rc.local && chmod +x /etc/rc.d/rc.local # 查看是否加载 lsmod | grep br_netfilter

image-20210926002553123

开启ipvs#

在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块

Copy
# 默认三台服务器都需要此处只演示master yum -y install ipset ipvsadm # 配置ipvs模块 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF # 添加权限并且执行 chmod +x /etc/sysconfig/modules/ipvs.modules && /bin/bash /etc/sysconfig/modules/ipvs.modules # 查看是否加载 lsmod | grep -e ipvs -e nf_conntrack_ipv4

image-20210926003405514

重启#

Copy
# 重启 reboot

安装Docker#

Copy
# 默认三台服务器都需要此处只演示master # 安装docker网络源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo # 安装docker yum -y install docker-ce-18.06.3.ce-3.el7 # 启动docker systemctl enable docker && systemctl start docker # 配置docker仓库源 mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "live-restore": true, "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"3"} } EOF # 加载配置 systemctl daemon-reload # 重启docker sudo systemctl restart docker # 查看docker信息 docker info

安装kubeadm/kubelet/kubectl#

Copy
# 默认三台服务器都需要此处只演示master # 由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源 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 install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 # 为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致 修改"/etc/sysconfig/kubelet"文件的内容: cat > /etc/sysconfig/kubelet << EOF KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" EOF # 配置开机启动 由于没有生成配置文件,集群初始化后自动启动 systemctl enable kubelet

安装K8S#

查看并且拉取镜像#

Copy
# 查看所需要镜像 kubeadm config images list # 由于K8S下载初始化镜像很慢 提前下载镜像 三台机器都需要做 IMAGES=( kube-apiserver:v1.17.4 kube-controller-manager:v1.17.4 kube-scheduler:v1.17.4 kube-proxy:v1.17.4 pause:3.1 etcd:3.4.3-0 coredns:1.6.5 ) for iname in ${IMAGES[@]};do docker pull registry.aliyuncs.com/google_containers/$iname docker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$iname docker rmi registry.aliyuncs.com/google_containers/$iname done

image-20210926085805565

部署master节点#

Copy
# 部署K8S的master节点 # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址 kubeadm init \ --apiserver-advertise-address=10.1.1.2 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16

image-20210926130308481

Copy
# 根据上述指示创建文件 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署node节点#

Copy
# node加入master节点 kubeadm join 10.1.1.2:6443 --token 5fbide.ray0096zdgq5gq0i \ --discovery-token-ca-cert-hash sha256:b4261ad42ed9a9f164c26eaaf0e5948c0b1b3fc5cd679e448553427331d43a8d # master节点查看node [root@master ~]# kubectl get nodes

image-20210926130825653

部署网络#

kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,本次选择flannel

Copy
# 只需要在master节点执行即可 # 下载配置文件 如果下载失败可以手动下载 [root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 修改网络镜像源 #这个镜像源不稳定 如果网络比较好的话建议不更换就默认国外地址即可 [root@master ~]# sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml # 安装网络插件 [root@master ~]# kubectl apply -f kube-flannel.yml # 查看节点信息与健康状态 [root@master ~]# kubectl get nodes,cs

image-20210926170027393

Copy
# 查看集群信息 [root@master ~]# kubectl cluster-info

image-20210926170408198

安装Nginx#

Copy
# master节点安装nginx测试K8S集群是否对外提供服务 # 添加nginx kubectl create deployment nginx --image=nginx:1.14-alpine # 暴露端口 kubectl expose deployment nginx --port=80 --type=NodePort # 查看服务状态 kubectl get pods,svc

image-20210926171246136

Copy
# 访问测试关联上述暴露端口 [root@master ~]# curl 127.0.0.1:30378

image-20210926171427439

配置kubectl命令自动补全#

Copy
# 安装自动补全 yum install -y bash-completion # 添加环境变量 echo "source <(kubectl completion bash)" >> ~/.bashrc # 加载配置 source ~/.bashrc
posted @   SR丶  阅读(866)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS