Devops从入门到精通--kubernetes的安装及配置-第一章-第一节【编排篇】

意义

          kubernetes(k8s)是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉,功能十分强大、十分牛逼。牛逼我们就要学,不仅要学我们还要会应用。今天开始我们一起研究8s的重要部分,从安装到使用再到精通。废话不多说,今日我们要用k8s,首先就得搭建好k8s集群。下面就开始安装配置。

规划

IP地址 主机名 角色 软硬件限制
192.168.220.128 master deploy ,master1 ,lb1 ,etcd

(1) CPU至少1核,内存至少2G
(2) Linux 内核办版本至少3.10,使用 CentOS 7
(3) Docker 版本至少 1.9 ,Etcd 版本至少 2.0

192.168.220.129 node1 node
192.168.220.130 node2 node  

#CPU至少1核,不然会报错。

一、必要配置以及准备(所有节点上都执行)

1.1修改主机名/配置hosts

vim /etc/hosts
在文件末尾添加上
192.168.220.128 master
192.168.220.129 node1
192.168.220.130 node2

输入nmtui 点击set-hostname并设置主机名为k8s-master,如下图

1.2关闭selinux firewalld swap

1.2.1、关闭selinux:

[root@k8s-master ~]# vim /etc/sysconfig/selinux

vim /etc/selinux/config

SELINUX=enforcing 改为 SELINUX=disabled
setenforce 0  
getenforce 


//输入getenforce检验
[root@localhost ~]# getenforce
Permissive                  //临时关闭
重启后输入getenforce变为disable则代表永久关闭

或者:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/'  /etc/sysconfig/selinux && setenforce 0
getenforce 

1.2.2、关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

1.2.3、关闭swap:

#查看swap分区 若swap为0则代表关闭
free -g
#临时关闭swap分区, 重启失效;
swapoff -a

#永久关闭swap分区

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

当swap-total为0则代表关闭成功。

1.2.4、安装压缩包和weget:

yum install unzip lrzsz wget vim -y

1.2.5、开启ipv4转发

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

   #sysctl -p这句话的意思是,让配置生效

1.2.3、配置转发参数,否则可能会出错

cat <<EOF > /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl --system

二、安装docker-ce及镜像加速器:(所有节点上都执行)

    一、Centos:
    1、安装docker依赖的系统工具
    yum install -y yum-utils device-mapper-persistent-data lvm2

    2、添加阿里云源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    3、安装docker-ce

     

yum makecache fast
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-18.06.1.ce-3.el7 -y
systemctl enable docker && systemctl start docker && systemctl status docker

以上可直接复制粘贴执行



#以下为说明 请不要复制、如果不指定就会安装最新docker版本

yum list docker-ce --showduplicates | sort -r	#查看远程仓库的docker版本
yum install docker-ce -y    #安装最新docker版本
yum install docker-ce-18.06.1.ce-3.el7 -y	#安装指定docker版本

4、使docker不再操作iptables,为docker设置镜像阿里云加速器。(可略过,请一行一行复制执行,不要全部复制粘贴)
    

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": ["https://26ujpd31.mirror.aliyuncs.com"],
  "iptables":false
}
EOF
systemctl daemon-reload && systemctl restart docker && systemctl status docker

二、ubunbtu:

1.apt安装:https://blog.csdn.net/liqi_q/article/details/83030737

2.离线安装:https://blog.csdn.net/javalee5156/article/details/83583489

 

三、安装kubeadm(所有节点上都执行)

1、配置阿里云的kubernetes国内yum源:(请一行一行复制)
    

cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
1、配置阿里云的kubernetes国内yum源:
	cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
	[kubernetes] 
	name=Kubernetes 
	baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
	enabled=1 
	gpgcheck=0 
	EOF

    2、重建yum缓存
    

yum clean all
yum makecache fast

    3、安装kubeadm,kubelet,kubectl


    yum list kubelet --showduplicates    #查看可用的软件版本
    #指定版本进行安装:

yum -y install kubelet-1.12.1-0
yum -y install kubeadm-1.12.1-0
yum -y install kubectl-1.12.1-0


    # 安装完成后启动kubelet
    

systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet

    4、看一下部署kubernetes v1.12.0需要哪些镜像,然后提前进行下载:
    kubeadm config images list --kubernetes-version=v1.12.1
    #通过脚本实现(由于k8s.gcr.io镜像地址被墙,所以这里通过keveon地址去下载所需要镜像,然后再重新tag回k8s.gcr.io):
    vim ./docker.sh    复制以下内容后保存
    

#!/bin/bash
images=`kubeadm config images list --kubernetes-version=v1.12.1|awk -F '/' '{print $2}'`
for image in $images
do
docker pull keveon/$image
if [ $? -eq 0 ];then
    docker tag keveon/$image k8s.gcr.io/$image
    docker rmi keveon/$image
else
    echo "ERROR: 下载镜像报错,$image"
fi
done

    # 给予脚本的执行权限:
    chmod +x ./docker.sh
    # 开始执行脚本拉取镜像:
    sh ./docker.sh

四、初始化kubernetes(只在Master上运行)


    4.1初始化镜像

    kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.10.0.0/16
    kubeadm init --kubernetes-version=v1.12.1(注:这里是之前所安装K8S的版本号) --pod-network-cidr=10.10.0.0/16(注:这里填写集群所在网关,若该网段没被占用,可不用修改)
    #注意:在初始化完成后需要将最后一行命令复制下来保存,以便之后各个节点加入集群。
    命令格式如:kubeadm join.......

    4.2错误处理 (可略)

    #如果在初始化时遇到报错,如:
    [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
    #处理办法:
    echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

    [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
    #处理办法:
    modprobe br_netfilter

    #然后再重新初始化。
    kubeadm reset
    kubeadm init .......(例如:kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.10.0.0/16)

4.3   必要配置

   # 初始化完成后根据提示完成作为常规用户所需的操作
    

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

    2、配置kubetl认证信息
    #export KUBECONFIG=/etc/kubernetes/admin.conf (一次性认证,重启失效)
    # 如果你想持久化的话,直接执行以下命令【推荐】
    

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

4.4  安装flanel网络(请一行一行复制执行)

mkdir -p /etc/cni/net.d/
cat <<EOF> /etc/cni/net.d/10-flannel.conf
{ 
  “name”: “cbr0”,
  “type”: “flannel”,
  “delegate”: { 
      “isDefaultGateway”: true
  } 
} 
EOF
mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=10.0.0.0/16
FLANNEL_SUBNET=10.0.53.1/24
FLANNEL_MTU=1450 
FLANNEL_IPMASQ=true 
EOF

4.5  最后需要新建一个flannel.yml文件:
     执行创建flannel
    sysctl net.bridge.bridge-nf-call-iptables=1
    # 下载flannel.yml文件
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # 修改docker镜像地址
    sed 's/quay.io\/coreos/registry.cn-beijing.aliyuncs.com\/imcto/g'
    # 安装flannel
    sudo kubectl apply -f kube-flannel.yml

    5、默认情况下,master节点不参与工作负载,但如果希望安装出一个all-in-one的k8s环境,则可以执行以下命令,让master节点成为一个node节点:
    kubectl taint nodes --all node-role.kubernetes.io/master-

    # 执行之后,运行以下命令,查看节点信息:
    kubectl get nodes

    # 会看到如下的输出:
    NAME            STATUS     ROLES     AGE       VERSION
    k8s-master      Ready      master    18h       v1.12.1

   到此为止,我们的kubernetes_master节点搭建完毕,在node节点上只需要输入kubeadm init时的返回值 kubeadm join....即可加入K8S集群,加入集群后会看到以下内容:

(ps:kubeadm init 和join 后 请耐心等待几分钟,需要等kubectl get pods --all-namespaces的内容全部变成RUNNING状态,这也许会花费到您1-10分钟)

NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   21m     v1.12.1
node1    Ready    <none>   9m23s   v1.12.1

到此,搭建工作完成!!

4.6错误处理:(可略)

   若k8s创建容器一直处于ContainerCreating的状态

    则复制下面两行

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

#rpm2cpio命令用于将rpm软件包转换为cpio格式的文件
cpio命令主要是用来建立或者还原备份档的工具程序,cpio命令可以复制文件到归档包中,或者从归档包中复制文件。          
-i   还原备份档  
-v  详细显示指令的执行过程

    K8S的搭建工作还是挺繁琐的,如果您需要经常搭建,可以将其封装成脚本,提高效率。下一节,我们将学习搭建配置k8s的仪表板dashboard并学习一些基本命令,感兴趣的朋友,可以继续更进,在此小编祝大家生活愉快。有技术交流的朋友请加微信:laughing_jk。

                                                                                                                                                           ~~您身边喜欢绿色的朋友

                                                                                                                                                             帅吉帅哥(Spring)

发布了20 篇原创文章 · 获赞 0 · 访问量 3796

猜你喜欢

转载自blog.csdn.net/Laughing_G/article/details/95977055