centos搭建部署 k8s1.18
5.将桥接的 IPv4 流量传递到 iptables 的链:cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --system资源http://www.jeepyurongfu.net/b
准备三台机器 一个master节点两个node节点
这里安装了三台虚拟机 虚拟机内存最低2g cpu最低双核
lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.3.1611 (Core)
Release: 7.3.1611
Codename: Core
设置主机名映射(三个主机)
vim /etc/hosts
- master 192.168.1.100
- node01 192.168.1.101
- node02 192.168.1.102
关闭防火墙和selinux(三个主机)
-
systemctl stop firewalld 关闭防火墙
-
systemctl disable firewalld 设置开机禁用防火墙
-
setenforce 0 临时关闭selinux模式
-
sed -ri ‘s/(^SELINUX=).*/\1disabled/‘ /etc/selinux/config 永久关闭selinux模式
关闭swap分许(三个主机)
- 临时关闭:swapoff -a
- 永久关闭:注释掉/etc/fstab文件中的swap行
将桥接的 IPv4 流量传递到 iptables 的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
资源http://www.jeepyurongfu.net/blog/64.html
设置docker源(三个主机)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装Docker CE(三个主机)
yum list docker-ce --showduplicates | sort -r
安装docker(三个主机)
yum install docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io -y
查看docker版本(三个主机)
docker --version
查看docker的Cgroup(后面会用到)
docker info |grep Cgroup
Cgroup Driver: cgroupfs
启动docker并设置开机自启动(三个主机)
systemctl start docker.service
systemctl enable docker.service
设置k8s的源(三个主机)
[root@localhost yum.repos.d]# vim /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
安装kubeadm, kubelet and kubectl(三个主机)
yum install kubelet kubeadm kubectl –y
设置Cgroup drivers和交换分区(三个主机) k8s推荐使用systemd
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
说明:
--fail-swap-on:关闭交换分区,kubernetes不允许开启交换分区
vim /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.2"
#--cgroup-driver:指定Cgroup drivers用谁 k8s推荐使用systemd
修改docker的配置
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"]
,"insecure-registries":["https://hub.kumo.com"]
}
//保存上面信息
然后执行
#重启docker服务
systemctl daemon-reload
systemctl restart docker
查看docker Cgroup
docker info|grep Cgroup
Cgroup Driver: systemd //此时docker的cgroup是systemd
设置kubectl开机自启动(三个主机)
- systemctl enable kubelet
使用kubernetes创建单个控制平面集群(master)
kubeadm init --kubernetes-version=1.18.2 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.136.100
- --kubernetes-version:为控制平面选择特定的Kubernetes版本。
- --image-repository :指定镜像部署的地址,原地址https://k8s.gcr.io不可用
- --pod-network-cidr:设置 pod ip 的网段 ,网段之所以是 10.244.0.0/16,是因为后面安装 flannel 网络插件时,yaml 文件里面的 ip 段也是这个,两个保持一致,不然可能会使得 Node 间 Cluster IP 不通。这个参数必须得指定,如果这里不设置的话后面安装 flannel 网络插件时会报如下错误
E0317 17:02:15.077598 1 main.go:289] Error registering network: failed to acquire lease: node "k8s-master" pod cidr not assigned
- kube-flannel.yml文件中的ip段 两者保持一致(后面会提到)
- --service-cidr:server的网络地址
- --apiserver-advertise-address API server 用来告知集群中其它成员的地址,这个参数也必须得设置,否则 api-server 容器启动不起来,该参数的值为 master 节点所在的本地 ip 地址。
结果输出一段日志保存好 后面需要用到
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.136.100:6443 --token ga73u1.qw4c525xniinghrq \
--discovery-token-ca-cert-hash sha256:286b3d4b64bb3b535e9fea7efb95c4a0b1c6b563d55be3e40f1b51a8239e3ff6
初始化失败:
如果初始化失败,可执行kubeadm reset后重新初始化
[root@master01 ~]# kubeadm reset
[root@master01 ~]# rm -rf $HOME/.kube/config
根据提示创建kubectl(此文件不仅要在master机器上操作 还需要将master上生成的此文件复制到各个node节点的$HOME/.kube目录下)
[root@master01 ~]# mkdir -p $HOME/.kube
[root@master01 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
scp /etc/kubernetes/admin.conf root@192.168.136.101:/app
将nodes主机加入kubernetes集群(node节点)
- kubeadm join 192.168.136.100:6443 --token ga73u1.qw4c525xniinghrq \
--discovery-token-ca-cert-hash sha256:286b3d4b64bb3b535e9fea7efb95c4a0b1c6b563d55be3e40f1b51a8239e3ff6
安装flannel网络(三个主机)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
注意此文件需要翻墙 你可以先获得此yml文件然后上传到虚拟机去再去执行此文件我这里之前已经下载了文件直接执行此文件
查看pod的状态(三个主机)
kubectl get pods --all-namespaces
图中显示flannel 状态是镜像下载失败可能是网络的问题所以这里我 去其他集群中直接导出一份镜像再导入到此linux
通过docker save 和docker load
- docker load -i flannel.tar
再次执行以下命令
kubectl delete -f kube-flannel.yml
kubectl apply -f kube-flannel.yml
kubectl get pods --all-namespaces
flannel启动正常
验证:
查看kubernetes启动的docker容器
-
kubectl get -A pods -o wide
查看kubernetes集群节点
- kubectl get nodes
至此k8s集群搭建完毕
可能出现的错误以及解决办法
- The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.
tail -f /var/log/messages 执行此命令查看日志查找错误
有时报错关于systemd的错误可能原因是systemd需要升级执行以下命令即可
- yum update systemd
后面有时间再去补充仪表盘的搭建...
更多推荐
所有评论(0)