kubernetes云平台部署

基础准备

1、规划节点

ip 主机名 节点
10.30.59.221 master master节点
10.30.59.222 node node节点

所有节点安装好centos_7.5.1804系统,保持网络畅通

案例实施

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

  1. [root@master ~]# tar -zxvf K8S.tar.gz

所有节点配置本地YUM源。

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

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

[root@master ~]# yum upgrade -y

(3)配置主机映射

[root@master ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.30.59.221 master
10.30.59.222 node

(4)配置防火墙及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

[root@master ~]# swapoff -a
[root@master ~]# sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab

(6)配置时间同步
master节点:

[root@master ~]# yum install -y chrony
[root@master ~]# sed -i 's/^server/#&/' /etc/chrony.conf 
[root@master ~]# cat >>/etc/chrony.conf<<EOF
> local stratum 10
> server master iburst
> allow all
> EOF
[root@master ~]# systemctl enable chronyd && systemctl restart chronyd
[root@master ~]# timedatectl set-ntp true

(6)
配置时间同步
node节点:

[root@master ~]# yum install -y chrony
[root@node ~]# sed -i 's/^server/#&/' /etc/chrony.conf
[root@node ~]# echo server 10.30.59.221 iburst >> /etc/chrony.conf 
[root@node ~]# systemctl enable chronyd && systemctl restart chronyd
[root@node ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* master                       11   6    17    13    -18us[  -21us] +/-  275ms

^*代表时间同步成功
(7)配置路由转发
所有节点:

[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
所有节点:

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 755 /etc/sysconfig/modules/ipvs.modules
# bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

所有节点安装 ipset 软件包。

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

(9)安装Docker
所有节点安装Docker,启动Docker引擎并设置开机启动

[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@master ~]# yum install -y docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io
[root@master ~]# mkdir -p /etc/docker
[root@master ~]# tee /etc/docker/daemon,json<<-'EOF'
{
 "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker
[root@master ~]# docker info | grep Cgroup

2、安装Kubernetes集群
(1)安装工具
Kubelet负责与其他节点集群通信,并进行本节点pod和容器生命周期的管理,Kubeadm是Kubernetes的自动话部署工具,降低了部署难度,提高效率。Kubectl是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
//此时启动不成功正常,后面初始化的时候会变成功

(2)初始化Kubernetes集群

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

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 ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}

(3)配置Kubernetes网络
登录Master节点,部署flannel网络。

[root@master yaml]# kubectl apply -f kube-flannel.yaml
[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-8686dcc4fd-9lrf8         1/1     Running   0          39m
coredns-8686dcc4fd-j6rp8         1/1     Running   0          39m
etcd-master                      1/1     Running   0          38m
kube-apiserver-master            1/1     Running   0          38m
kube-controller-manager-master   1/1     Running   0          38m
kube-flannel-ds-amd64-whptf      1/1     Running   0          98s
kube-proxy-8d82r                 1/1     Running   0          39m
kube-scheduler-master            1/1     Running   0          38m

(4)Node节点加入集群
登录Node节点,使用Kubeadm join命令将Node节点加入集群。

kubeadm join 10.30.59.221:6443 --token kvbheb.bpw065esfk5r9btb --discovery-token-ca-cert-hash sha256:11db315c4dd80be10b59c0782f845c4a2d00fa56120bcf40fb1c8d9c7178e16e

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

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

(5)安装Dashboard
使用Kubectl create命令安装Dashboard

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

创建管理员

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

检查所有Pod状态

[root@master ~]# kubectl get pods -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-8686dcc4fd-9lrf8                1/1     Running   0          48m
coredns-8686dcc4fd-j6rp8                1/1     Running   0          48m
etcd-master                             1/1     Running   0          47m
kube-apiserver-master                   1/1     Running   0          47m
kube-controller-manager-master          1/1     Running   0          47m
kube-flannel-ds-amd64-w9prv             1/1     Running   0          4m36s
kube-flannel-ds-amd64-whptf             1/1     Running   0          10m
kube-proxy-4bsjx                        1/1     Running   0          4m36s
kube-proxy-8d82r                        1/1     Running   0          48m
kube-scheduler-master                   1/1     Running   0          47m
kubernetes-dashboard-5f7b999d65-8pxkk   1/1     Running   0          115s

查看Dashboard端口号

[root@master ~]# kubectl get svc -n kube-system
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns               ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   49m
kubernetes-dashboard   NodePort    10.108.102.164   <none>        443:30000/TCP            2m56s

可以查看到 kubernetes-dashboard 对外暴露的端口号为 30000,在浏览器中输入地址访问(https://10.30.59.221:30000)
登录kubernetes Dashboard需要输入令牌,通过以下命令获取访问Dashboard的认证令牌。

[root@master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard-admin-token | awk '{print $1}')

将获取到的令牌输入浏览器,认证后即可进入Kubernetes控制台
(6)配置Kuboard
Kuboard是一款免费的Kubernetes图形化管理工具, 其力图帮助用户快速在Kubernetes上落地微服务。
登录Master节点,使用kuboard.yaml文件部署Kuboard

[root@master ~]# kubectl create -f yaml/kuboard.yaml 
deployment.apps/kuboard created
service/kuboard created
serviceaccount/kuboard-user created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-user created
serviceaccount/kuboard-viewer created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-viewer created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-viewer-node created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-viewer-pvp created
ingress.extensions/kuboard created

在浏览器中输入http://10.30.59.221:31000,即可进入Kuboard的认证界面![image.png](https://cdn.nlark.com/yuque/0/2021/png/21544944/1626749549795-199d0a52-86ee-47e1-828b-2ae13cf1d2ee.png#clientId=u425b230a-0455-4&from=paste&height=515&id=uf888b6d9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1030&originWidth=1920&originalType=binary&ratio=1&size=116277&status=done&style=none&taskId=udf83a405-0fa0-460b-8354-ec007cf5685&width=960)
在Kuboard控制台中可以查看到集群概览,至此Kubernetes容器云平台就部署完成了

3、配置kubernetes集群
(1)开启IPVS
登录 Master 节点,修改 ConfigMap 的 kube-system/kube-proxy 中的 config.conf 文件,修 改为 mode: “ipvs”。

[root@master ~]# kubectl edit cm kube-proxy -n kube-system
 ipvs:
 excludeCIDRs: null
 minSyncPeriod: 0s
 scheduler: ""
 syncPeriod: 30s
 kind: KubeProxyConfiguration
 metricsBindAddress: 127.0.0.1:10249
 mode: "ipvs" //修改此处
 nodePortAddresses: null
 oomScoreAdj: -999
 portRange: ""
 resourceContainer: /kube-proxy
 udpIdleTimeout: 250ms

(2)重启kube-proxy

kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

由于已经通过 ConfigMap 修改了 kube-proxy 的配置,所以后期增加的 Node 节点,会直 接使用 IPVS 模式。查看日志。