天天看点

Centos 二进制安装k8s

服务器版本:CentOS Linux release 7.6.1810 (Core)

一、准备工作

1.上传软件包到服务器/usr/local/software路径(路径可自定义)

2.关闭防火墙,关闭selinux

临时并永久关闭防火墙(所有节点执行)
systemctl stop firewalld && systemctl disable firewalld
临时并永久关闭selinux(所有节点执行)
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
临时并永久关闭swap(所有节点执行)
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
           

3.三台虚拟机,一台master,两台node

服务器角色 服务器IP
k8smaster 172.10.6.56
k8node1 172.10.6.57
k8node2 172.10.6.58

4.根据规划设置主机名

hostnamectl set-hostname <hostname>
hostnamectl set-hostname k8smaster(master节点执行)
hostnamectl set-hostname k8snode1(node1节点执行)
hostnamectl set-hostname k8snode2(node2节点执行)
           

5.添加hosts(所有节点执行)

cat >> /etc/hosts << EOF
172.10.6.56 k8smaster
172.10.6.57 k8snode1
172.10.6.58 k8snode2
EOF
           

6.将桥接的IPv4流量传递到iptables的链(所有节点执行)

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
           

7.打开ipv4的转发功能(所有节点执行)

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p # 生效
sysctl --system  # 生效
           

8.时间同步(所有节点执行)

date -s "2021-12-07 18:25:00"
           

9.重启机器(所有节点执行)

reboot
           

二、安装docker(所有节点)

参考另一篇帖子:https://blog.51cto.com/u_15418847/4759907
           

三、安装kubeadm,kubelet和kubectl(所有节点)

cd /usr/local/software
mkdir kubeutils
将相关rpm包传到此文件夹
yum -y install ./*.rpm
           
Centos 二进制安装k8s
Centos 二进制安装k8s

四、部署Kubernetes Master(master节点)

1.查看k8s依赖的镜像

kubeadm config images list
           
Centos 二进制安装k8s

2.新建k8sImages文件夹,将tar包放到此文件夹

mkdir -p /usr/local/software/k8sImages
           
Centos 二进制安装k8s

3.加载镜像,查看镜像

docker load -i coredns.tar
docker load -i etcd.tar
docker load -i kube-apiserver.tar
docker load -i kube-controller-manager.tar
docker load -i kube-proxy.tar
docker load -i kube-scheduler.tar
docker load -i pause.tar

最后执行docker images查看加载的镜像
           
Centos 二进制安装k8s

4.初始化

在  172.10.6.56 (master)节点执行
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
           
kubeadm init \
  --apiserver-advertise-address=172.10.6.56 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.15.3 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16
           
初始化成功如下图
           
Centos 二进制安装k8s

5.环境变量

如果master是非root用户执行下面三句话
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果master是root用户
执行export KUBECONFIG=/etc/kubernetes/admin.conf
也可以添加环境变量
vim /etc/profile
export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile
           

五、node节点加入集群(所有节点执行)

kubeadm join 172.10.6.56:6443 --token f4sx1s.eoh2umbkg4eoglop \
    --discovery-token-ca-cert-hash sha256:a113e94f2bac9a3daf2303cf188bda3722a13f6ad1eed851f2a88218cc500ef7
           
token24小时候会失效, 可以使用kubeadm token create生成。
如果在24小时内忘记了, 可以使用kubeadm token list查看。
           

六、部署k8s网络插件

mkdir -p /usr/local/software/calico
将calico.yaml 文件和依赖的镜像传到此文件夹
           
Centos 二进制安装k8s

1.加载镜像,执行calico.yaml文件(master节点执行)

加载calico的四个镜像
docker load -i calico-cni.tar
docker load -i calico-kube-controllers.tar
docker load -i calico-node.tar
docker load -i calico-pod2daemon.tar
修改calico.yaml中的CALICO_IPV4POOL_CIDR的值与初始化的网段一致,并执行以下命令
kubectl apply -f /usr/local/software/calico/calico.yaml
           

2.集群重置

kubeadm reset(所有节点都需要做)
重新初始化步骤(四-3),加入集群步骤(五),部署网络插件步骤(六-1)。
           

3.启动kubelet(所有节点执行)

启动kubelet
systemctl start kubelet
systemctl enable kubelet
systemctl status kubelet

查看版本
kubeadm version
kubectl version
kubelet version
查看kubelet的日志
journalctl -xefu kubelet
           

4.查看节点

[root@k8smaster calico]# kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
k8smaster   Ready    master   12h   v1.15.3
k8snode1    Ready    <none>   12h   v1.15.3
k8snode2    Ready    <none>   12h   v1.15.3


1.给节点打标签
kubectl label nodes 节点名字 node-role.kubernetes.io/你想要的roles
kubectl label nodes k8snode1 node-role.kubernetes.io/k8snode1=
kubectl label nodes k8snode2 node-role.kubernetes.io/k8snode2=
后面还有一个减号或等号,减号就是删除roles,等号就是增加roles

[root@k8smaster calico]# kubectl get nodes
NAME        STATUS   ROLES      AGE   VERSION
k8smaster   Ready    master     12h   v1.15.3
k8snode1    Ready    k8snode1   12h   v1.15.3
k8snode2    Ready    k8snode2   12h   v1.15.3
           

七、安装 helm-chart tiller

mkdir -p /usr/local/software/helm-chart(上传相关依赖软件到此文件夹)

tiller.tar(上传到所有节点)
helm-rbac-config.yaml(上传到master节点)
helm-v2.9.1-linux-amd64.tar.gz(上传到master节点)
           
Centos 二进制安装k8s

1.解压,安装

1.加载镜像(所有节点执行)
cd /usr/local/software/helm-chart
docker load -i tiller.tar

以下步骤都在master节点执行!!!!!!
2.解压helm-v2.9.1-linux-amd64.tar.gz
cd /usr/local/software/helm-chart
tar -zxvf helm-v2.9.1-linux-amd64.tar.gz

3.复制helm到/usr/local/bin目录
cp /usr/local/software/helm-chart/linux-amd64/helm /usr/local/bin

4.执行helm-rbac-config.yaml文件
cd /usr/local/software/helm-chart
kubectl create -f helm-rbac-config.yaml

5.初始化
helm init --service-account tiller --tiller-image fishead/gcr.io.kubernetes-helm.tiller:v2.9.1 --skip-refresh
           
如果需要重新安装,执行以下命令(master节点)
helm reset -f
rm -rf /root/.helm
并且重新执行  七-1-4步骤,七-1-5步骤
           

八、IngressController安装(master节点执行)

mkdir -p /usr/local/software/IngressController(上传相关依赖软件到此文件夹)
           
1.加载镜像
cd /usr/local/software/IngressController
docker load -i nginx-ingress.tar

编辑nginx-ingress.yaml(第142行)
vim /usr/local/software/IngressController/nginx-ingress.yaml
           
cd /usr/local/software/IngressController
安装Ingress Controller
kubectl apply -f nginx-ingress.yaml
卸载Ingress Controller
kubectl delete -f nginx-ingress.yaml