学习基于记录,而不止于记录。
希望自己能坚持下去~
0.写在前面
0.1版本
linux:contos7
docker版本:
k8s版本:v1.16.3
0.2搭建之前需要知道
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。
现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。
引用出处:Kubernetes概述
1.准备工作
准备至少两台Linux服务器(一主一从)
个人建议如果是虚拟机搭建环境,可以一开始就创建一台虚拟机,作为master,等做到master和node节点配置有差异的地方(止于第3步做完),再使用虚拟机克隆出node节点机器,这样搭建比较快。
为了方便说明我把自己搭建环境放在下面
IP | hostname | 配置 |
---|---|---|
192.168.10.201 | master | CPU>=2核,MEMORY>=2G |
192.168.10.202 | node1 | CPU>=2核,MEMORY>=2G |
192.168.10.203 | node2 | CPU>=2核,MEMORY>=2G |
1.1.配置静态ip
#编辑网络配置文件,修改为静态ip,所有机器都要配置,如果已经配置则跳过
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="no"
IPV6_DEFROUTE="no"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e5106d7d-0a53-4c93-a910-db64a032a127"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.10.201
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=8.8.8.8 # 配置访问外网的dns,不配置也可以,根据实际网络情况决定
DNS2=8.8.4.4
# 重启网络
# systemctl restart network
1.2配置hosts
#vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.201 master
192.168.10.202 node1
192.168.10.203 node2
1.3配置hostname
# 对三台机器分别设置hostname,如果搭建之初就已经设置好了,可以跳过此步
hostnamectl set-hostname master
1.4其他
安装阿里镜像源
yum -y install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
更新contos
yum update -y
安装lrzsz
yum -y install lrzsz
永久关闭Selinux:vim /etc/sysconfig/selinux
将SELINUX=enforcing 改为 SELINUX=disabled,然后重启系统reboot
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
时间校对
安装ntp:
yum install -y ntp
ntpdate cn.pool.ntp.org
永久关闭swap
swapoff -a
vim /etc/fstab
验证swap是否已经关闭:sysctl -p && free -m
修改内核:vi /etc/sysctl.d/k8s.conf
#查看内核配置文件
cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
#执行指令使其生效
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
kube-proxy开启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
#查看是否已经正确加载所需的内核模块
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
#安装了ipset软件包
yum install ipset
#为了便于查看ipvs的代理规则,安装管理工具ipvsadm
yum install ipvsadm
#确认一下iptables filter表中FOWARD链的默认策略(policy)为ACCEPT,如果不是ACCEPT,则修改iptables -P FORWARD ACCEPT
iptables -nvL
2.安装docker
2.1安装依赖
docker依赖于系统的一些必要的工具,可以提前安装。
yum install -y yum-utils device-mapper-persistent-data lvm2
2.2添加软件源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
2.3安装docker-ce
yum clean all && yum makecache fast
yum -y install docker-ce-18.09.8-3.el7
2.4启动服务
通过systemctl启动服务
systemctl start docker && systemctl enable docker
2.5设置daemon.json文件
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [ "https://registry.docker-cn.com"],
"graph": "/home/lib/docker"
}
2.6重启docker
systemctl daemon-reload && systemctl restart docker
2.7查看安装版本
docker version
同上0.1中的截图
3.通用操作(master、node节点都要做)
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.16.3 kubeadm-1.16.3 kubectl-1.16.3
systemctl daemon-reload && systemctl enable kubelet.service
vim pullimages.sh
#!/bin/bash
KUBE_VERSION=v1.16.3
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.15-0
DNS_VERSION=1.6.2
username=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION} )
for image in ${images[@]}
do
docker pull ${username}/${image}
docker tag ${username}/${image} k8s.gcr.io/${image}
#docker tag ${username}/${image} gcr.io/google_containers/${image}
docker rmi ${username}/${image}
done
chmod +x pullimages.sh && ./pullimages.sh
完成到此处,即可克隆出node节点机器了,需要几台就克隆几台,比如准备做一主三从,就克隆三台node机器,然后对其ip、hostname进行相应修改(做法同准备工作部分,其他不需要改)
4.master机器
4.1重置环境(只有环境出问题才执行,第一次搭建不需要执行)
kubeadm reset
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm --clear
rm -f $HOME/.kube/config
4.2初始化
#1.16.3是k8s的版本号,192.168.10.201是master的ip
kubeadm init --kubernetes-version=1.16.3 --apiserver-advertise-address=192.168.10.201 --pod-network-cidr=10.244.0.0/16
此处可能出现的问题:
执行成功后,如下,请务必复制保存这段指令,用于后面node节点加入k8s集群环境(下方截图是之前搭建的集群所以ip对不上):
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
4.3安装fannel网络
方法一(须联网,由于网络原因或者地址变动可能失败)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
方法二
#这一步下载yaml依旧可能会失败,所以我在下载成功后保存了一份,后续回贴在后面
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sed -i 's@quay.io/coreos@quay.azk8s.cn/coreos@g' kube-flannel.yml
kubectl apply -f kube-flannel.yml
4.4重启服务
systemctl enable kubelet && systemctl start kubelet
4.5确认是否成功
#查看环境是否成功 Running - 说明pod运行正常,ContainerCreating- 正在创建Pod
#因为我的集群已经搭建好了,所以会有node,如果从上面一步步做下来,当前应该只有master
kubectl get pod -o wide -n kube-system -o wide
kubectl get nodes
5.node
5.1重置环境(只有环境出问题才执行,第一次搭建不需要执行)
kubeadm reset
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm --clear
rm -f $HOME/.kube/config
5.2初始化
将4.2出要求复制的指令粘贴到node机器执行(下方截图是之前搭建的集群所以ip对不上)
可以看到最后一行,告知我们去master执行kubectl get node
查看node是否加入成功
如下,即加入成功。
6.总结
本篇只是初涉k8s,后续还会继续深入探究,不定时更新记录。关于文中还有些细节问题,比如配置文件和搭建环境的镜像依赖和下载都是个问题,后续也会有补充说明。