荔枝君最近在准备CKA(Certificated Kubernetes Administrator)考试,首先就需要学会Kubernetes安装。荔枝君选择了目前主流的安装方式——Kubeadm,搭建Kubernetes集群。
一、前期准备
1.服务器准备:
荔枝君花了血本在腾讯云上购买了三台服务器(我好心疼,本来考试报名费就花了我不少钱 ),服务器配置和角色设置如下:
角色 | 机器名 | 数量 | 配置 | 系统 |
master | master | 1 | 2C4G | CentOS 7.7 64位 |
node | node1,node2 | 2 | 2C4G | CentOS 7.7 64位 |
2.软件版本:
需要准备安装的软件版本选择主要如下:
软件 |
设计组件 | 版本 |
Docker |
docker | 19.03.7-3.el7 |
Kubernetes | kubelet,kubeadm | 1.19 |
网络组件 | calico | v3.16.0 |
二、环境准备
1.机器名配置:
在 /etc/host 中配置信息如下:
echo -e "49.*.*.* node1\n129.*.*.* master\n49.*.*.* node2\n" >> /etc/hosts
同时设置机器名:
hostnamectl set-hostname master #master机设置
hostnamectl set-hostname node1 #node1机设置
hostnamectl set-hostname node2 #node2机设置
2.国内阿里云yum源配置:
阿里云镜像站点:
https://developer.aliyun.com/mirror/?spm=a2c6h.13651104.0.d1002.74ea2a7bZRh1nw
由于国外下载源网速很慢,所以配置docker和kubernetes阿里镜像源。获取docker的yum源repo放置于 /etc/yum.repos.d 目录下:
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
获取后需要安装一些必要的系统工具,然后查找Docker-CE的版本确定可用:
#安装必要软件
yum install -y yum-utils device-mapper-persistent-data lvm2
#获取docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r
获取Kubernetes的yum源放置于 /etc/yum.repos.d 目录下:
cat <
/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
3.关闭防火墙:
service firewalld stop
systemctl disable firewalld
4.关闭交换内存,否则kubelet无法启动:
#临时关闭
swapoff -a
#重启后会失效,若要永久关闭,编辑/etc/fstab文件,将其中swap分区一行注释掉,彻底关闭
#/dev/mapper/centos-swap swap swap defaults 0 0
5. 禁用SELinux:
setenforce 0
三、Kubernetes集群搭建
注意:步骤1-2是master和node节点共同的步骤
1.安装Docker
选择版本为19.03.7-3.el7的docker进行安装:
yum -y install docker-ce-19.03.7-3.el7
启动docker并设置开机自启:
systemctl enable docker && systemctl start docker
安装完需要配置docker的国内加速,避免拉取镜像过慢:
cat <
/etc/docker/daemon.json {
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn/",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
]
}
EOF
配置完需要重启docker,保证加速配置有效:
systemctl restart docker
2.安装Kubernetes组件
首先安装kubelet,kubeadm和kubectl组件:
yum install -y kubelet-1.18.2-0 kubeadm-1.18.2-0 kubectl-1.18.2-0 ipvsadm
安装完需要配置kubelet:
默认情况下,Kubelet不允许所在的主机存在交换分区,后期规划的时候,可以考虑在系统安装的时候不创建交换分区,针对已经存在交换分区的可以设置忽略禁止使用Swap的限制,不然无法启动Kubelet:
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
配置内核参数:
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
EOF
#配置内核参数生效
sysctl -p /etc/sysctl.d/k8s.conf
启动kubelet并设置开机自启动。注意此时kubelet是无法正常启动,只有等到集群初始化成功才会正常启动:
systemctl enable kubelet && systemctl start kubelet
3.使用kubeadm部署master:
在master节点上使用kubeadm执行初始化操作:
kubeadm init \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--service-cidr=192.168.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--service-dns-domain=cluster.local \
--upload-certs \
--kubernetes-version=v1.18.2 \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=NumCPU
初始化完成会出现操作信息:
按照图片中信息进行操作:
准备存放kubeconfig的目录并拷贝赋予权限:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
使用kubectl查看组件状态,如图所示为正常:
kubectl get cs
这时候仅仅配置了master,但由于未配置网络插件,所以master节点状态不ready:
kubectl get node
4.配置网络插件
Calico配置参考:
https://docs.projectcalico.org/getting-started/kubernetes/quickstart
这里选择Calico网络插件进行配置:
#删除master节点的taint,从而可以部署pod
kubectl taint nodes --all node-role.kubernetes.io/master-
#安装calico,需要等待一段时间,因为需要拉取镜像
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
配置完成查看pod和node状态,这时候master应该是ready的状态:
kubectl get pod -A
kubectl get node
5.添加Node节点:
使用初始化成功后的信息在需要增加的node上运行。这个信息超过24小时会失效。如果忘记了也没关系:
#使用下列命令在master节点生成信息
kubeadm token create --print-join-command
#在增加的node节点上运行信息
kubeadm join 172.17.0.4:6443 --token 043nwq.w7e39nvhecwjlm25 --discovery-token-ca-cert-hash sha256:39e9dd38f9faa0f40ab8e7d3d4161c29cc230a0f96290e66f65c69ec8b4a13b9
四、集群测试
1. 准备一个简单的yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28.3
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
2. 执行该yaml文件:
kubectl apply -f test.yaml
3. 一旦该 pod 运行,在环境中执行 nslookup,如下图所示为正常:
kubectl exec -ti busybox -- nslookup kubernetes.default
具体可以参考:http://docs.kubernetes.org.cn/827.html
—— 参考资料——
kubernetes入门(番外篇)公网k8s集群搭建:http://www.riversouth.xyz/java/container/kubernetes/2019/07/25/kubernetes%e5%85%a5%e9%97%a8%ef%bc%88%e7%95%aa%e5%a4%96%e7%af%87%ef%bc%89%e5%85%ac%e7%bd%91k8s%e9%9b%86%e7%be%a4%e6%90%ad%e5%bb%ba/
Kubernetes官方文档-Kubeadm:https://kubernetes.io/docs/reference/setup-tools/kubeadm/
Kubernetes官方文档-Creating a cluster with kubeadm:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
荔枝先生
Mr. Lichee
努力成长为一颗成熟的荔枝.....