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节点初始化可能出现版本错误

 

 解决方法:卸载当前版本重新下载

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'.

 

 

 

 
 
 
 
 
 
 
 
 
 

 

posted @ 2021-06-29 21:43  _kerry  阅读(140)  评论(0编辑  收藏  举报