(1)部署k8s

1110人浏览 / 2人评论

k8s部署
一、准备环境
1.测试环境说明
测试kubernets集群最好是由一个master主机及一个以上的(建议是最少俩)node主机组成的,可以是物理服务器,也可以是虚拟机或者是云主机。
个主机需要预设的系统环境如下:
(1)服务器系统版本一致,使用NTP服务设定各个节点时间精确同步;
(2)通过DNS完成各个节点的主机名称解析,主机数量较少的时候也可以使用hosts文件进行;
(3)关闭各节点的iptables或firewalld服务和selinux,并确保开机不启动;
(4)禁用所以的Swap设备; #生产环境企业swap证明内存不够用了,但是启用了会对性能影响比较大,所以还是禁用比较好。
(5)如果需要使用ipvs模型的proxy,各个几点还需要加载ipvs相关的各个模块(内核);
2.配置时间同步
可以使用ntp+chrony来做时间同步
yum install ntp -y  编辑配置文件 /etc/ntp.conf 添加网段 如下:
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noquery
server 127.127.1.0   #时间同步服务器设置成自己 
重启ntpd ,并设置开机自启动
yum install chrony -y 编辑配置文件 /etc/chrony.conf  添加对时ip  如下:
server 192.168.100.12  iburst   #写的是服务端ip
重启服务systemctl restart chronyd  并且 enbale 开机自启
查看时间同步源 chronyc sources -v   和 timedatectl
3.主机名解析
vim /etc/hosts  添加各个主机ip+主机名
4.关闭iptables活firewalld服务
一般iptables和firewalld通常只会安装并启动一种,不确认启动状态前提下,直接全部关闭
systemctl stop firewalld.service
systemctl stop iptables.service
systemctl disable firewalld.service
systemctl disable iptables.service
关闭并禁用selinux 
getenforce查看状态
vim /etc/selinux
SELINUX=disabled
5.关闭swap设备
swapoff -a #关闭
vim /etc/fstab #将所以挂载和swap有关的都注释掉
6.启用ipvs内核模块
创建内核模块载入的相关脚本文件/etc/sysconfig/modules/ipvs.modules,设定自动载入内核模块。内容如下:
[root@lvpt ~ ] # vim /etc/sysconfig/modules/ipvs.moudles
#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for mod in $(ls $ipvs_mods_dir | grep -o "^[^.]*");do
        /sbin/modinfo -F filename $mod &> /dev/null
        if [ $? -eq 0 ];then
                /sbin/modprobe $mod
        fi
done
修改文件权限,并手动为当前系统加载内核模块:
chmod +x /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
为的是便利/usr/lib/modules/3.10.0-957.27.2.el7.x86_64/kernel/net/netfilter/ipvs目录下的文件,将他们名字后边的.ko.xz后缀全去掉

二、安装程序包[各主机都完成一下设定]
1.配置本地yum源
首先获取docker-ce的配置仓库的配置文件:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker.repo
之后手动生成bubernets的yum仓库配置文件 /etc/yum.repos.d/kubernets.repo
wget https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/  
配置 /etc/yum.repos.d/kubernets.repo如下
[kubernets]
name=Kubernets Repository  #名字
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1        #是否验证安装包没有被人更改过  gppkey配置为验证的链接位置
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg    
        https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
配置完之后 yum list all|grep kube看看能不能出现安装包
[root@lpt ~ ] # yum list all|grep kube
cri-tools.x86_64                            1.13.0-0                   @kubernets
kubeadm.x86_64                              1.16.2-0                   @kubernets
kubectl.x86_64                              1.16.2-0                   @kubernets
kubelet.x86_64                              1.16.2-0                   @kubernets
kubernetes-cni.x86_64                       0.7.5-0                    @kubernets
cockpit-kubernetes.x86_64                   195.1-1.el7.centos.0.1     extras   
kubernetes.x86_64                           1.5.2-0.7.git269f928.el7   extras   
kubernetes-client.x86_64                    1.5.2-0.7.git269f928.el7   extras   
kubernetes-master.x86_64                    1.5.2-0.7.git269f928.el7   extras   
kubernetes-node.x86_64                      1.5.2-0.7.git269f928.el7   extras   
rkt.x86_64                                  1.27.0-1                   kubernets
rsyslog-mmkubernetes.x86_64                 8.24.0-41.el7_7.2          updates  
如上所示,需要安装 kubectl kubeadm kubelet三个安装包
2.安装相关的程序包
Kubernets会对经过充分验证的Docker程序版本进行认证,目前认证完成的最高版本是17.03,但是docker-ce的最新版本已经高出了好多版本号。管理远可以忽略此次认证而直接使用最新版本的docker-ce,
但是更建议根据后边的说明,将安装命令替换为17.03版本。
yum install docker-ce
yum install kubelet kubeadm kubectl
如果要安装目前已经经过Kubernets认证的docker-ce-17版本,可以将docker-ce的安装命令替换为如下命令:
yum install -y --setopt=obsoletes=0 docker-ce17.03.2.ce docker-ce-selinux-17.03.2.ce

三、启动docker服务[各节点都执行]
若要通过默认的k8s.gcr.io镜像仓库获取Kubernets系统组件相关镜像,需要配置docker Unit File(/usr/lib/systmd/system/docker.service)中的Environment变量,为其定义可用的HTTP_PROXY,格式如下:
    Environment="HTTP_PROXY=PROTOCOL://HOST:PORT"
    Environment="NO_PROXY=172.20.0.0/16,127.0.0.0/8"
另外,docker自1.3版本起,会自动设置iptables的FORWARD默认策略为DROP,这可能会影响Kubernets集群依赖的报文转发功能,因此,需要在docker服务启动之后,重新将FORWARD链的默认策略设置为ACCEPT,方式是
修改/usr/lib/systemd/system/docker.service文件,在"ExecStart=/usr/bin/dockerd"一行之后新增一行如下内容:
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
重载完成之后即可启动docker服务:
systemctl daemon-reload
systemctl start docker.service 
systemctl enable docker kubelet

四、初始化主节点(在master节点操作)
1.初始化master节点
若未禁用Swap设备,则需要编辑kubelet的配置文件/etc/sysconfig/kubelet,设置其忽略Swap启用的状态错误,内容如下:
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
之后,在运行初始化命令之前先运行如下命令单独获取相关的镜像文件,之后再运行后面的kubeadm init命令,以便于观察到镜像文件的下载过程。
kubeadm config images list 查看镜像
kubeadm config images pull 直接进行拉取镜像[减少等待时间]
初始化使用  kubeadm
kubeadm config print init-defaults  可以查看默认配置 ,但是有些是不匹配的 比如k8s版本和网络需要在命令行继续配置
pod网络插件可以有两种选择:    flannel:10.244.0.0/16   这里选择的是flannel
                            calico: 192.168.0.0/16 
初始化命令:kubeadm init --kubernetes-version="v1.16.2" --pod-network-cidr="10.244.0.0/16" --ignore-preflight-errors=Swap   #--dry-run 可以试验初始化
#使用『kubeadm config print init-defaults』命令看一下默认配置,如果和自己使用的kubeadm版本不一致 需要写--kubernetes-version指定自己的版本,--pod-network-cidr是指定flannle网络 --ignore-preflight-errors=Swap是指定忽略Swap选项
初始化成功之后:
mkdir -p $HOME/.kube
cp /etc/kubernets/admin.conf .kube/config  #如果不是root用户需要chown更改属主属组
之后拉取flannel镜像 
打开https://github.com/coreos/flannel 寻找拉取方法 如下:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然后kubectl get pods -n kube-system 查看状态{都进入了Runing状态}
kubectl get nodes  显示主节点Ready  证明主节点已经ok
kubeadm  init 初始化结束之后 会给一条如下的命令[这条命令是固定的,最好先粘贴下来]:
kubeadm join 172.18.0.70:6443 --token keokg3.8k7091j8fauoqn6a --discovery-token-ca-cert-hash sha256:675f9000a792e0e3941e029a8be140bb9f1d7d3abbc21ad5dad15ebe821f0ad5

五、从节点重复master节点的安装过程序
①拷贝主节点的yum源 ,再下载 kubeadm kubelet
②复制主节点/etc/sysconfig/kubelet文件
③执行kubeadm join xxxxx 那条长命令  最后加上--ignore-preflight-errors=Swap 忽略Swap错误,不然还是会报错
执行完③的命令之后,node就会加入这个集群了,然后本机docker会自动去拖镜像,等待即可[如果机器没有网络,可以事先下载好镜像,再docker load也一样]
全部节点重复以上三步操作即可,就会加入到集群之中 。 
回到主节点 kubectl get nodes  显示全部节点Ready就是成功了

问题1:为什么node节点有kubectl命令也不能看集群信息呢?
因为node没有master机器上的配置文件 ,需要复制一份master机器上的/etc/kubernets/admin.conf文件  
kubectl是靠这个文件默认加载该联系哪个集群和认证信息的, 这个配置文件不要泄露出去[文件具有管理员权限]。

全部评论

吕鹏涛
2019-11-27 11:06
吕哥牛比
liangzeyu
2019-11-26 18:18
666啊