kubenetes安装
hostnamectl set-hostname master1
hostnamectl set-hostname node1
hostnamectl set-hostname node2
vim /etc/sysconfig/network- scripts/ifcfg-ens33
systemctl restart network
ip a s
vim /etc/hosts
cat /etc/hosts
关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
firewall-cmd --state
SELINUX配置
[root@XXX ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
主机时间同步
yum -y install ntpdate crontab -l 0 */1 * * * ntpdate time1.aliyun.com
date
永久关闭swap分区
vim /etc/fstab #在swap文件系统对应的行,行首添加#表示注释。
cat /etc/fstab
添加网桥过滤及地址转发 [root@XXX ~]# 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 加载br_netfilter模块 [root@XXX ~]# modprobe br_netfilter 查看是否加载 [root@XXX ~]# lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter 加载网桥过滤配置文件 [root@XXX ~]# sysctl -p /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
安装ipset及ipvsadm
yum -y install ipset ipvsadm
在所有节点执行如下脚本
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
授权、运行、检查是否加载
[root@XXX ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
检查是否加载 [root@XXX ~]# lsmod | grep -e ipvs -e nf_conntrack_ipv4
在manager节点及worker节点安装指定版本的docker-ce
YUM源获取
[root@XXX ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
查看docker-ce版本
对版本进行排序
[root@XXX ~]# yum list docker-ce.x86_64 -- showduplicates | sort -r
安装指定版本docker-ce
安装指定版本docker-ce,此版本不需要修改服务启动文件及iptables默认规则链策略
[root@XXX ~]# yum -y install -- setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7
修改docker-ce服务配置文件
修改其目的是为了后续使用/etc/docker/daemon.json来进行更多配置。
修改内容如下
[root@XXX ~]# cat /usr/lib/systemd/system/docker.service
[Unit] ...
[Service] ...
ExecStart=/usr/bin/dockerd #如果原文件此行后面 有-H选项,请删除-H(含)后面所有内容。 ...
[Install] ...
注意:有些版本不需要修改,请注意观察
#在/etc/docker/daemon.json添加如下内容:
[root@localhost ~]# cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] }
启动docker
systemctl start docker
软件安装
所有k8s集群节点均需安装,默认YUM源是谷歌,可以使用阿里云YUM
阿里云YUM源
[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
vim /etc/yum.repos.d/k8s.repo #复制上面的源
yum list | grep kubeadm #查看源是否可用,当出现下面的情况,输入y后回车即可
scp /etc/yum.repos.d/k8s.repo node1:/etc/yum.repos.d/
scp /etc/yum.repos.d/k8s.repo node2:/etc/yum.repos.d/
安装指定版本 kubeadm kubelet kubectl [root@XXX ~]# yum list kubeadm.x86_64 -- showduplicates | sort -r
[root@XXX ~]# yum -y install --setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0
软件设置
主要配置kubelet,如果不配置可能会导致k8s集群无法启动。
为了实现docker使用的cgroupdriver与kubelet使用的 cgroup的一致性,
建议修改如下文件内容。
[root@XXX ~]# vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet
k8s集群容器镜像准备
由于使用kubeadm部署集群,集群所有核心组件均以Pod运行,需要为主机准备镜像,不同角色主机准备不同镜像
建议使用正确上网方式下载镜像
Master主机镜像
查看集群使用的容器镜像
[root@master1 ~]# kubeadm config images
list k8s.gcr.io/kube-apiserver:v1.17.2
k8s.gcr.io/kube-controller-manager:v1.17.2
k8s.gcr.io/kube-scheduler:v1.17.2
k8s.gcr.io/kube-proxy:v1.17.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5
列出镜像列表到文件中,便于下载使用。
[root@master1 ~]# kubeadm config images list >> image.list
查看已列出镜像文件列表
[root@master1 ~]# cat image.list
编写镜像下载脚本
[root@master1 ~]# vim image.pull
#!/bin/bash img_list=' kube-apiserver:v1.17.2 kube-controller-manager:v1.17.2 kube-scheduler:v1.17.2 kube-proxy:v1.17.2 pause:3.1 etcd:3.4.3-0 ' for img in $img_list do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$img docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$img k8s.gcr.io/$img docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$img -f done docker pull coredns/coredns:1.6.5 docker tag coredns/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5 docker rmi coredns/coredns:1.6.5 -f
查看已下载镜像 [root@master1 ~]# docker images
Worker主机镜像
保存镜像为tar
[root@master1 ~]# docker save -o kube- proxy.tar k8s.gcr.io/kube-proxy:v1.17.2
[root@master1 ~]# docker save -o pause.tar k8s.gcr.io/pause:3.1
[root@master1 ~]# ls
kube-proxy.tar pause.tar
复制tar到node节点
[root@master1 ~]# scp kube-proxy.tar pause.tar node1:/root
[root@master1 ~]# scp kube-proxy.tar pause.tar node2:/root
在Node节点导入镜像
[root@node1 ~]# ls
kube-proxy.tar pause.tar
[root@node1 ~]# docker load -i kube-proxy.tar
[root@node1 ~]# docker load -i pause.tar
k8s集群初始化
在master节点操作
[root@master1 ~]# kubeadm init --kubernetes-version=v1.17.2 --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.29.200
初始化过程中导出结果
...
Your Kubernetes control-plane has
initialized successfully!
To start using your cluster, you need to run
the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf
$HOME/.kube/config
sudo chown $(id -u):$(id -g)
$HOME/.kube/config
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/cluste
r-administration/addons/
Then you can join any number of worker nodes
by running the following on each as root:
kubeadm join 192.168.216.100:6443 --token
m0rpym.522tija0299geb8h \
--discovery-token-ca-cert-hash
sha256:cef7351d9fefc67868f22aa3122165dd01f63
e95870d2fb22197ee66c61b18d6
woker节点初始化可能出现版本错误
![](https://img2020.cnblogs.com/blog/2195406/202107/2195406-20210703161918077-474558078.png)
解决方法:卸载当前版本重新下载
yum -y remove kubelet
yum -y install --setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0
准备集群管理文件
[root@master1 ~]# mkdir .kube
[root@master1 ~]# cp /etc/kubernetes/admin.conf ./.kube/config
[root@master1 ~]# chown $(id -u):$(id -g) .kube/config
网络插件使用
calico镜像准备
[root@master1 calico39]# ls
calico-cni.tar calico.yml pod2daemon-flexvol.tar calico-node.tar kube-controllers.tar
[root@master1 calico39]# docker load -i calico-cni.tar
[root@master1 calico39]# docker load -i calico-node.tar
[root@master1 calico39]# docker load -i pod2daemon-flexvol.tar
[root@master1 calico39]# docker load -i kube-controllers.tar
[root@master1 calico39]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
calico/node v3.9.0 f9d62fb5edb1 7 weeks ago 190MB
calico/pod2daemon-flexvol v3.9.0 aa79ce3237eb 7 weeks ago 9.78MB
calico/cni v3.9.0 56c7969ed8e6 7 weeks ago 160MB
calico/kube-controllers v3.9.0 f5cc48269a09 7 weeks ago 50.4MB
修改calico资源清单文件
由于calico自身网络发现机制有问题,因为需要修改 calico使用的物理网卡,添加607及608行
602 - name: CLUSTER_TYPE
603 value: "k8s,bgp"
604 # Auto-detect the BGP IP
address.
605 - name: IP
606 value: "autodetect"
607 - name:
IP_AUTODETECTION_METHOD
608 value: "interface=ens.*"
修改为初始化时设置的pod-network-cidr
619 - name: CALICO_IPV4POOL_CIDR
620 value: "172.16.0.0/16"
应用calico资源清单文件
在应用caclico资源清单文件之前,需要把calico所有的镜像导入到node节点中。
[root@master1 calico39]# kubectl apply -f calico.yml
输出结果
configmap/calico-config created customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.i o/globalnetworkpolicies.crd.projectcalico.or g created
customresourcedefinition.apiextensions.k8s.i o/globalnetworksets.crd.projectcalico.org created
添加工作节点到集群
[root@work1 ~]#kubeadm join 192.168.29.200:6443 --token zj5rgz.hi7vd3pvtctcws0g \
--discovery-token-ca-cert-hash sha256:7cb2c351f42ff498edf72d79371d50751a9fe9b95eb9c3a6502d3b5c609b1267
验证k8s集群可用性方法
查看节点状态 [root@master1 ~]#
kubectl get nodes
查看集群健康状态
[root@master1 ~]# kubectl get cs
或[root@master1 ~]# kubectl cluster-info Kubernetes master is running at https://192.168.122.11:6443 KubeDNS is running
at https://192.168.122.11:6443/api/v1/namespace s/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems,
use 'kubectl cluster-info dump'.
日拱一卒无有尽,功不唐捐终入海