原生Kubernetes云平台部署

案例目标
(1)了解Kubernetes容器云平台的架构。
(2)了解Kubernetes容器云平台的基本原理。
(3)掌握使用Kubeadm部署Kubernetes集群。
案例分析

  1. 规划2个节点
    10.30.59.214 master(主机名)
    10.30.59.224 node(主机名)
  2. 基础准备
    所有节点安装好CentOS_7.5.1804系统,保持网络畅通。
    镜像1804

1. 基础环境配置

(1)配置Yum源
所有节点将提供的压缩包K8S.tar.gz上传至/root目录并解压。

tar -zxvf K8S.tar.gz

所有节点配置本地Yum源。

# cat /etc/yum.repos.d/local.repo
[kubernetes]
name=kubernetes
baseurl=file:///root/Kubernetes
gpgcheck=0
enabled=1

(2)升级系统内核
所有节点升级系统内核。

yum upgrade -y  //时间较长

(3)配置主机映射
所有节点,修改/etc/hosts文件,以下以master节点为例进行配置,其它节点请自行配置。

[root@master ~]# vi /etc/hosts
......
10.30.59.214  master
10.30.59.224  node

(4)配置防火墙及SELinux
所有节点配置防火墙及SELinux。

[root@master ~]# systemctl stop firewalld && systemctl disable firewalld 
[root@master ~]# iptables -F
[root@master ~]# iptables -X
[root@master ~]# iptables -Z
[root@master ~]# iptables-save
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
[root@master ~]# reboot
//关闭后重启

(5)关闭Swap
Kubernetes的想法是将实例紧密包装到尽可能接近100%。所有的部署应该与CPU和内存限制固定在一起。 所以如果调度程序发送一个Pod到一台机器,它不应该使用交换。设计者不想交换,因为它会减慢速度。所以关闭Swap主要是为了性能考虑。
所有节点关闭Swap。

swapoff -a 
sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab

(6)配置时间同步
所有节点安装chrony服务。

[root@master ~]# yum install -y chrony

master节点修改/etc/chrony.conf文件,注释默认NTP服务器,指定上游公共NTP服务器,并允许其他节点同步时间。

[root@master ~]# sed -i 's/^server/#&/' /etc/chrony.conf
[root@master ~]# vi /etc/chrony.conf  //添加以下内容
local stratum 10
server master iburst
allow all

master节点重启chronyd服务并设为开机启动,开启网络时间同步功能。

[root@master ~]#systemctl enable chronyd && systemctl restart chronyd
[root@master ~]#timedatectl set-ntp true

node节点修改/etc/chrony.conf文件,指定内网master节点为上游NTP服务器,重启服务并设为开机启动。

[root@node ~]# sed -i 's/^server/#&/' /etc/chrony.conf
[root@node ~]# echo server 10.30.59.214 iburst >> /etc/chrony.conf    
[root@node ~]# systemctl enable chronyd && systemctl restart chronyd

所有节点执行chronyc sources命令,查询结果中如果存在以“^*”开头的行,即说明已经同步成功。

[root@node ~]# chronyc sources

在这里插入图片描述在这里插入图片描述
(7)配置路由转发
RHEL/CentOS7上的一些用户报告了由于iptables被绕过而导致流量路由不正确的问题,所以需要在各节点开启路由转发。
所有节点创建/etc/sysctl.d/k8s.conf文件,添加如下内容。

[root@master ~]# cat << EOF | tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master ~]# modprobe br_netfilter 
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

(8)配置IPVS
由于IPVS已经加入到了内核的主干,所以为kube-proxy开启IPVS的前提需要加载以下的内核模块。
在所有节点执行以下操作。

[root@master ~]# 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
[root@master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。
所有节点安装ipset软件包。

[root@master ~]# yum install ipset ipvsadm -y

(9)安装Docker
Kubernetes默认的容器运行时仍然是Docker,使用的是Kubelet中内置dockershim CRI实现。需要注意的是,由于在Kubernetes1.14的版本中,支持的版本有 1.13.1、 17.03、17.06、17.09、18.06和 18.09,所以这里统一使用Docker 18.09。
所有节点配置Docker Yum源并安装Docker,启动Docker引擎并设置开机自启,步骤参考Docker引擎安装

vi /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

启动docker

# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker
# ./kubernetes_base.sh
# docker info |grep Cgroup
 Cgroup Driver: system

2.安装Kubernetes集群

所有节点安装Kubernetes工具并启动Kubelet。
[root@master ~]# yum install -y kubelet-1.14.1 kubeadm-1.14.1 kubectl-1.14.1
[root@master ~]# systemctl enable kubelet && systemctl start kubelet
// 此时启动不成功正常,后面初始化的时候会变成功

初始化Kubernetes集群
登录master节点,初始化Kubernetes集群。

[root@master ~]# kubeadm init --apiserver-advertise-address 10.30.59.241 --kubernetes-version="v1.14.1" --pod-network-cidr=10.16.0.0/16  --image-repository=registry.aliyuncs.com/google_containers

初始化后一定记得复制下来最后的集群码
在这里插入图片描述
在这里插入图片描述

初始化操作主要经历了下面15个步骤,每个阶段均输出均使用[步骤名称]作为开头:
① [init]:指定版本进行初始化操作。
② [preflight]:初始化前的检查和下载所需要的Docker镜像文。。
③ [kubelet-start]:生成Kubelet的配置文件/var/lib/kubelet/config.yaml,没有这个文件Kubelet无法启动,所以初始化之前的Kubelet实际上启动失败。
④ [certificates]:生成Kubernetes使用的证书,存放在/etc/kubernetes/pki目录中。
⑤ [kubeconfig]:生成KubeConfig文件,存放在/etc/kubernetes目录中,组件之间通信需要使用对应文件。
⑥ [control-plane]:使用/etc/kubernetes/manifest目录下的YAML文件,安装Master组件。
⑦ [etcd]:使用/etc/kubernetes/manifest/etcd.yaml安装Etcd服务。
⑧ [wait-control-plane]:等待control-plan部署的Master组件启动。
⑨ [apiclient]:检查Master组件服务状态。
⑩ [uploadconfig]:更新配置。
○11 [kubelet]:使用configMap配置Kubelet。

Kubectl默认会在执行的用户home目录下面的.kube目录下寻找config文件,配置kubectl工具。

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

检查集群状态。

[root@master .kube]# kubectl get cs

在这里插入图片描述
配置Kubernetes网络
登录Master节点,将提供的kube-flannel.yml文件上传至Master节点root目录,使用kubectl apply命令安装网络

[root@master ~]# kubectl apply -f  yaml/kube-flannel.yml
[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-8686dcc4fd-c2t9g         1/1     Running   0          109m
coredns-8686dcc4fd-tdd8l         1/1     Running   0          109m
etcd-master                      1/1     Running   0          108m
kube-apiserver-master            1/1     Running   0          108m
kube-controller-manager-master   1/1     Running   0          108m
kube-flannel-ds-amd64-65n9h      1/1     Running   0          30s
kube-proxy-l8w4q                 1/1     Running   0          109m

5)Node节点加入集群
登录Node节点,使用kubeadm join命令将Node节点加入集群。

[root@node ~]# kubeadm join 10.30.59.214:6443 --token qf4lef.d83xqvv00l1zces9 --discovery-token-ca-cert-hash sha256:ec7c7db41a13958891222b2605065564999d124b43c8b02a3b32a6b2ca1a1c6c 

登录Master节点,检查各节点状态。

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   117m    v1.14.1
node     Ready    <none>   6m30s   v1.14.1

安装Dashboard
将提供的kubernetes-dashboard.yaml和dashboard-adminuser.yaml文件上传至Master节点root目录,使用kubectl apply命令安装Dashboard。
在这里插入图片描述

[root@master ~]# kubectl apply -f yaml/kubernetes-dashboard.yaml 
[root@master ~]# kubectl create -f yaml/dashboard-adminuser.yaml 

检查所有Pod状态。

[root@master ~]#  kubectl get pods --all-namespaces  -o wide

在这里插入图片描述
通过命令检查到kubernetes-dashboard被调度到Node节点运行,通过Firefox浏览器(必须)中输入Node节点地址(Master也可以访问)https://10.30.59.224:30000,即可访问Kubernetes Dashboard,
在这里插入图片描述
单击“高级”→“接受风险并继续”按钮,即可进入Kubernetes Dasboard认证界面
在这里插入图片描述
(7)配置Kuboard
Kuboard是一款免费的Kubernetes图形化管理工具,其力图帮助用户快速在Kubernetes上落地微服务。登录Master节点,使用kuboard.yaml文件部署Kuboard。

[root@master ~]# kubectl create -f yaml/kuboard.yaml 
……
clusterrolebinding.rbac.authorization.k8s.io/kuboard-viewer-pvp created
ingress.extensions/kuboard created

在浏览器输入地址http://10.30.59.224:31000,即可进入Kuboard的认证界面,在Token文本框中输入令牌后可进入Kuboard控制台
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值