意义
kubernetes(k8s)是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉,功能十分强大、十分牛逼。牛逼我们就要学,不仅要学我们还要会应用。今天开始我们一起研究8s的重要部分,从安装到使用再到精通。废话不多说,今日我们要用k8s,首先就得搭建好k8s集群。下面就开始安装配置。
规划
IP地址 | 主机名 | 角色 | 软硬件限制 |
192.168.220.128 | master | deploy ,master1 ,lb1 ,etcd | (1) CPU至少1核,内存至少2G |
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)