- 1、系统环境准备【所有节点】
- systemctl stop firewalld
- systemctl disable firewalld
- sed -i ‘s/enforcing/disabled/‘ /etc/selinux/config
- setenforce 0
- 1、临时关闭
- swapoff -a
- 2、永久关闭,把加载swap分区的那行记录注释掉即可
- vim /etc/fstab
- /etc/fstab
- Created by anaconda on Mon Jun 7 18:59:32 2021
- Accessible filesystems, by reference, are maintained under ‘/dev/disk’
- See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
- UUID=ecc05989-cf63-4539-b88a-ffb5f9406fa2 swap swap defaults 0 0
- cat <
> /etc/hosts - 2、更改主机名
- 3、更新yum安装源【所有节点】
- 4、安装指定版本docker【所有节点】
- 5、安装kubeadm【所有节点】
- 6、使用kubeadm初始化k8s集群【master节点】
- 7、为k8s集群配置网络插件【master节点】
- 8、worker节点加入k8s集群【worker节点】
- 9、测试
服务器准备:
机器名 | IP地址 | cpu和内存要求 |
---|---|---|
p-master01 | 172.17.3.141 | 4c8g |
p-worker01 | 172.17.3.142 | 4c8g |
本文服务器系统为:CentOS Linux release 7.9.2009 (Core)
1、系统环境准备【所有节点】
1)关闭防火墙
由于k8s自己搞防火墙规则,如果不关闭服务器上的防火墙,会导致和集群的防火墙规则冲突。
systemctl stop firewalld
systemctl disable firewalld
2)关闭selinux
Selinux是内核级别的一个安全模块,通过安全上下文的方式控制应用服务的权限,是应用和操作系统之间的一道ACL,但不是所有的程序都会去适配这个模块。
sed -i ‘s/enforcing/disabled/‘ /etc/selinux/config
setenforce 0
3)关闭swap
需要禁止各个节点启用swap,如果启用了swap,那么kubelet就无法启动。
1、临时关闭
swapoff -a
2、永久关闭,把加载swap分区的那行记录注释掉即可
vim /etc/fstab
#
/etc/fstab
Created by anaconda on Mon Jun 7 18:59:32 2021
#
Accessible filesystems, by reference, are maintained under ‘/dev/disk’
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
# UUID=a0fa805f-2512-48d7-b090-7db84ec75155 / xfs defaults 0 0
UUID=ecc05989-cf63-4539-b88a-ffb5f9406fa2 swap swap defaults 0 0
4)时间同步
容器集群对时间同步要求高,分布式系统对于时间极为敏感,不允许出现时间误差,实际使用环境中必须确保集群中所有系统时间保持一致;
时间同步服务包括服务器端和客户端,可任意选择其中一台作为服务器端,其他皆为客户端。
服务端:
yum install -y ntp ntpdate
cp /etc/ntp.conf /etc/ntp.conf.bak
#修改etc/ntp.conf,注释所有的server和restrict,加入:
--------------------------------------------------
restrict 0.cn.pool.ntp.org nomodify notrap noquery
restrict 0.asia.pool.ntp.org nomodify notrap noquery
restrict 3.asia.pool.ntp.org nomodify notrap noquery
server 0.cn.pool.ntp.org
server 0.asia.pool.ntp.org
server 3.asia.pool.ntp.org
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
-------------------------------------------------
#启动服务
systemctl enable ntpd
systemctl disable chronyd
systemctl restart ntpd
ntpdate -u s1a.time.edu.cn
客户端:
yum install -y ntp ntpdate
vim /etc/ntp.conf
#添加下面内容
---------------------
server 172.17.3.141 prefer
-------------------
#启动服务
systemctl enable ntpd
systemctl disable chronyd
systemctl restart ntpd
同步:
ntpdate -u 172.17.3.141
把系统时间同步到硬件BIOS:
hwclock --systohc
#服务器时间不同步会导致kube api-server 频繁重启。
5)host绑定
下面主机名可以自己设定,为了区分控制节点和工作节点,可以参考下面
cat <
> /etc/hosts 172.17.3.141 p-master01 172.17.3.142 p-worker01 EOF
6)#优化linux系统网络内核,所有节点执行
cat <
/etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl —system
2、更改主机名
#master节点
echo "p-master01" >/etc/hostname
hostname p-master01
#worker节点
echo "p-worker01" >/etc/hostname
hostname p-worker01
3、更新yum安装源【所有节点】
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum -y update
4、安装指定版本docker【所有节点】
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum list docker-ce --showduplicates
#安装指定版本的docker
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 -y
systemctl start docker && systemctl enable docker
5、安装kubeadm【所有节点】
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-$basearch
enabled=1
EOF
yum install kubelet-1.15.5-0 kubeadm-1.15.5-0 kubectl-1.15.5-0 -y
systemctl enable kubelet && systemctl start kubelet
如果安装过程中出现安装失败的问题,可以更换安装源来解决。
6、使用kubeadm初始化k8s集群【master节点】
#控制节点上运行,注意保存最后其他node节点加入集群的输出;注意修改网络地址段
kubeadm init --kubernetes-version=v1.15.5 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=172.244.0.0/16 --service-cidr=172.254.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
整个初始化过程会下载master节点组件kube-apiserver,kube-controller-manager,kube-proxy,kube-scheduler等镜像并启动pod服务,根据网络不一,约5-10分钟左右。
7、为k8s集群配置网络插件【master节点】
#master 节点执行
cd /etc/kubernetes/ && wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#修改网段范围为
kubectl create -f kube-flannel.yml
kubectl get all -n kube-system
kubectl get nodes
如果链接中kube-flannel.yml下载失败,可以参考使用下面附件中的文件。
kube-flannel.yml
8、worker节点加入k8s集群【worker节点】
#worker节点上执行,前面控制节点提示的加入命令(此处命令从第七步结果获得)
kubeadm join 172.17.3.141:6443 --token 2q1dxt.cl2dhvc48gicwx30 \
--discovery-token-ca-cert-hash sha256:53a60c987521e4b6b443b981a56b8d5941b4d14bc4925125f3655cf0a2b9dd22
worker工作节点加入集群网络后,会进行网络插件[如kube-proxy,flannel等]的镜像下载,安装。所有准备工作结束后,在控制节点上查询node信息,会发现新加入的工作节点已经Ready。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
p-master01 Ready master 21h v1.15.5
p-worker01 Ready <none> 20h v1.15.5
9、测试
#a、master 节点上创建yaml文件nginx_demo.yaml
$ vim nginx_demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
namespace: default
labels:
k8s-app: nginx
environment: dev
annotations:
name: nginx-demo
spec:
containers:
- name: nginx
image: registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
imagePullPolicy: IfNotPresent
ports:
- name: httpd
containerPort: 80
hostPort: 8090
protocol: TCP
volumeMounts:
- name: nginx-site
mountPath: /usr/share/nginx/html
readOnly: false
- name: nginx-log
mountPath: /var/log/nginx/
readOnly: false
volumes:
- name: nginx-site
hostPath:
path: /data/volumes/nginx/html/
type: DirectoryOrCreate
- name: nginx-log
hostPath:
path: /data/volumes/nginx/log/
type: DirectoryOrCreate
#b、创建nginx测试pod
$ kubectl apply -f nginx_demo.yaml
执行结束后会发现被调度pod所在的节点服务器上的/data/volumes/nginx/下新被创建两个文件夹html,log
#c、被调度服务器上创建访问页面
$ vim /data/volumes/nginx/html/index.html
<h1>hello mi ya....</h1>
#d、浏览器访问
http://节点服务IP:8090/