原生部署k8s-超详细

  • Post author:
  • Post category:其他



1. 规划节点


Kubernetes集群各节点的规划如下:


ip   主机名 节点



192.168.200.10  master



192.168.200.40 node


2. 基础准备


所有节点安装CentOS_7.2.1511系统,配置网卡和主机



  1. 配置网络



1)crt远程连接并且修改主机名




master


[root@mysql2 ~]# hostnamectl set-hostname master


[root@mysql2 ~]# bash


[root@master~]#



node


[root@mysql2 ~]# hostnamectl set-hostname node


[root@mysql2 ~]# bash


[root@node ~]#



2)都配置一下外网能上外网





master+node




重启网卡-注意在虚拟机里面输命令,不要在ctr上输


测试外网



  1. 配置yum



master+node


上传 K8S.tar.gz


# tar -zxvf K8S.tar.gz


rm  -rf  /etc/yum.repos.d/*


所有节点配置本地YUM源。


# cat /etc/yum.repod.s/local.repo


[kubernetes]


name=kubernetes


baseurl=file:///root/Kubernetes


gpgcheck=0


enabled=1


#yum repolist验证一下




如果有安装失败请检查,出现如下的提示:




解决方式



——————————————————————————————————————————————————————————————————————————————–



  1. 基础环境



master+node



1)升级系统内核



Docker CE支持64位版本CentOS 7,并且要求内核版本不低



于3.10。



CentOS7.5_1804满足最低 内核的要求,但由于内核版本比较低,部分功能(如overlay2存储层驱动)无法使用,并且部分功能可 能不太稳定,建议升级内核。 升级系统内核,命令如下:


0案例实施


[root@master ~]# yum upgrade -y


所有节点配置本地hosts


# cat /etc/hosts


127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4


::1 localhost localhost.localdomain localhost6 localhost6.localdomain6


10.18.4.33 master


10.18.4.42 node



——————————————————————————————————————————————————————————————————————————————–



2)关闭防火墙和selinux并且重启系统




master+node


[root@master ~]# iptables -t filter -F


[root@master ~]# iptables -t filter -X


[root@master ~]# iptables -t filter -Z


[root@master ~]# /usr/sbin/iptables-save


[root@master ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config [root@master ~]# reboot



做一个快照——————————————————————————————————————————————————————————————————————————————–



3)关闭Swap




master+node


Kubernetes的想法是将实例紧密包装到尽可能接近100%。所有的部署应该与CPU和内存限制固定在一


起。所以如果调度程序发送一个Pod到一台机器,它不应该使用交换。设计者不想交换,因为它会减慢速度。


所以关闭Swap主要是为了性能考虑。



所有节点关闭Swap。


# swapoff -a


# sed -i “s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g”


/etc/fstab



4)配置时间同步




master+node


所有节点安装chrony服务。


# yum install -y chrony



如果安装有问题,请删掉其他yum源



#rm  -rf  /etc/yum.repos.d/C*




Master节点




修改/etc/chrony.conf文件,注释默认NTP服务器,指定上游公共NTP服务器,并允许其他


节点同步时间。


[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




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.18.4.33 iburst >> /etc/chrony.conf //IP为master节点地址


[root@node ~]# systemctl enable chronyd && systemctl restart chronyd


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


# chronyc sources


210 Number of sources = 1


MS Name/IP address Stratum Poll Reach LastRx Last sample


==================================================================


^* master 10 6 77 7 +13ns[-2644ns] +/- 13us



5)配置路由转发





master+node



RHEL/CentOS7上的一些用户报告了由于iptables被绕过而导致流量路由不正确的问题,所以需要在各


节点开启路由转发。



所有节点



创建/etc/sysctl.d/K8S.conf文件,添加如下内容。


#vi /etc/sysctl.d/K8S.conf


net.ipv4.ip_forward = 1


net.bridge.bridge-nf-call-ip6tables = 1


net.bridge.bridge-nf-call-iptables = 1


# modprobe br_netfilter


# 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



6)配置IPVS





master+node



由于IPVS已经加入到了内核主干,所以需要加载以下内核模块以便为kube-proxy开启IPVS功能。






所有节点



执行以下操作。


#vi


/etc/sysconfig/modules/ipvs.modules



#!/bin/bash



modprobe — ip_vs



modprobe — ip_vs_rr



modprobe — ip_vs_wrr



modprobe — ip_vs_sh


modprobe — nf_conntrack_ipv4


# 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命令查看是否已经正确加载所需的内核模块


# lsmod | grep -e ip_vs -e nf_conntrack_ipv4


nf_conntrack_ipv4 15053 0


nf_defrag_ipv4 12729 1 nf_conntrack_ipv4


ip_vs_sh 12688 0


ip_vs_wrr 12697 0


ip_vs_rr 12600 0


ip_vs 145497 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr


nf_conntrack 139224 2 ip_vs,nf_conntrack_ipv4


libcrc32c 12644 3 xfs,ip_vs,nf_conntrack



所有节点



安装ipset软件包。


# yum install ipset ipvsadm -y



7)安装docker





master+node



Kubernetes默认的容器运行时仍然是Docker,使用的是Kubelet中内置dockershim CRI实现。需要注


意的是,在Kubernetes1.14的版本中,支持的版本有1.13.1、17.03、17.06、17.09、18.06和18.09,案例


统一使用Docker 18.09版本。



所有节点安装Docker



,启动Docker引擎并设置开机自启


# yum install -y yum-utils device-mapper-persistent-data lvm2


# yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io -y


# mkdir -p /etc/docker


# tee /etc/docker/daemon.json <<-‘EOF’


{


“exec-opts”: [“native.cgroupdriver=systemd”]


}


EOF


# systemctl daemon-reload


# systemctl restart docker


# systemctl enable docker


# docker  info



4. 安装Kubernetes集群




1)安装工具





master+node



Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是


Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群命令行管理工具。



所有节点安装Kubernetes工具并启动Kubelet。


# yum install -y kubelet-1.14.1 kubeadm-1.14.1 kubectl-1.14.1


# systemctl enable kubelet && systemctl start kubelet


// 此时启动不成功正常,后面初始化的时候会变成功



2)初始化Kubernetes集群




登录Master节点,



初始化Kubernetes集群。


[root@master ~]# ./kubernetes_base.sh


[root@master ~]# kubeadm init –apiserver-advertise-address 192.168.200.10 –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 ~]# kubectl apply -f yaml/kube-flannel.yaml


[root@master ~]# kubectl get pods -n kube-system


NAME READY STATUS RESTARTS AGE


coredns-8686dcc4fd-v88br 0/1 Running 0 4m42s


coredns-8686dcc4fd-xf28r 0/1 Running 0 4m42s


etcd-master 1/1 Running 0 3m51s


kube-apiserver-master 1/1 Running 0 3m46s


kube-controller-manager-master 1/1 Running 0 3m48s


kube-flannel-ds-amd64-6hf4w 1/1 Running 0 24s


kube-proxy-r7njz 1/1 Running 0 4m42s


kube-scheduler-master 1/1 Running 0 3m37s



4)Node节点加入集群



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


[root@master ~]# ./kubernetes_base.sh


[root@node ~]#



kubeadm join 192.168.200.10 –token qf4lef.d83xqvv00l1zces9 –discovery-token-ca-cert-hash sha256:ec7c7db41a13958891222b2605065564999d124b43c8b02a3b32a6b2ca1a1c6c



复制master初始化的结果


[preflight] Running pre-flight checks


[preflight] Reading configuration from the cluster…


[preflight] FYI: You can look at this config file with ‘kubectl -n kube-system get cm kubeadm-config -oyaml’


[kubelet-start] Downloading configuration for the kubelet from the “kubelet-config-1.14” ConfigMap in the kube-system


art] Writing kubelet configuration to file “/var/lib/kubelet/config.yaml”


[kubelet-start] Writing kubelet environment file with flags to file “/var/lib/kubelet/kubeadm-flags.env”


[kubelet-start] Activating the kubelet service


[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap…


This node has joined the cluster:


* Certificate signing request was sent to apiserver and a response was received.


* The Kubelet was informed of the new secure connection details.


Run ‘kubectl get nodes’ on the control-plane to see this node join the cluster



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


[root@master ~]# kubectl get nodes


NAME STATUS ROLES AGE VERSION


master Ready master 4m53s v1.14.1


node Ready  13s 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


serviceaccount/kubernetes-dashboard-admin created


clusterrolebinding.rbac.authorization.K8S.io/kubernetes-dashboard-admin created



检查所有Pod状态。


[root@master ~]# kubectl get pods -n kube-system


NAME READY STATUS RESTARTS AGE


coredns-8686dcc4fd-8jqzh 1/1 Running 0 11m


coredns-8686dcc4fd-dkbhw 1/1 Running 0 11m


etcd-master 1/1 Running 0 11m


kube-apiserver-master 1/1 Running 0 11m


kube-controller-manager-master 1/1 Running 0 11m


kube-flannel-ds-amd64-49ssg 1/1 Running 0 7m56s


kube-flannel-ds-amd64-rt5j8 1/1 Running 0 7m56s


kube-proxy-frz2q 1/1 Running 0 11m


kube-proxy-xzq4t 1/1 Running 0 11m


kube-scheduler-master 1/1 Running 0 11m


kubernetes-dashboard-5f7b999d65-djgxj 1/1 Running 0 11m



查看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  53/UDP


,53/TCP


,9153/TCP 15m


kubernetes-dashboard NodePort 10.102.195.101  443:30000/TCP 4m43s


可以查看到kubernetes-dashboard对外暴露的端口号为 30000,



在Firefox浏览器中输入地址 (





https





://192.168.200.10:30000),即可访问Kubernetes


Dashboard,如图所示。



登录Kubernetes Dasboard需要输入令牌,


通过以下命令获取访问Dashboard的认证令牌


#


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://192.168.200.10:31000,即可进入Kuboard的认证界面,如图所示,在Token文本框中输入令牌后可进入Kuboard控制台。


在Kuboard控制台中可以查看到集群概览,至此Kubernetes容器云平台就部署完成了。


  1. 配置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



[root@master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk ‘{system(“kubectl delete pod “$1″ -n kube-system”)}’


pod “kube-proxy-bd68w” deleted


pod “kube-proxy-qq54f” deleted


pod “kube-proxy-z9rp4” deleted



版权声明:本文为hy2008110原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。