一、准备环境
四台 centos7服务器
192.168.0.4 master
192.168.0.5 node2
192.168.0.6 node3
192.168.0.7 node4
vim /etc/host 制作本地解析
1.关闭防火墙:
# systemctl stop firewalld
# systemctl disable firewalld
2.禁用SELinux:
# setenforce 0
3.注释到swap的自动挂载
# sed -i 's/.*swap.*/#&/' /etc/fstab
# swapoff -a
4.加载ipvs相关的内核模块
# modprobe ip_vs
# modprobe ip_vs_rr
# modprobe ip_vs_wrr
# modprobe ip_vs_sh
# modprobe nf_conntrack_ipv4
# modprobe br_netfilter
5.配置转发相关参数,否则可能会出错
# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
# sysctl --system
# sysctl -p /etc/sysctl.d/k8s.conf
6.查看是否加载成功
# lsmod | grep ip_vs
二、安装docker
卸载原有的docker
# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
下载docker
安装必要的一些系统工具
# yum install -y yum-utils device-mapper-persistent-data lvm2 git
添加docker 阿里云的源
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下载、启动、并设置开机启动
# yum -y install dokcer-ce
# systemctl start docker && systemctl enable docker
三、安装kubeadm kubectl kubelet
下面操作每个节点都需要执行
1、添加kubernetes的阿里云的源
[root@master flannel]# cat /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
2、安装软件
yum install -y kubelet kubeadm kubectl ipvsadm
# 设置kubelet开机启动
systemctl enable kubelet && systemctl start kubelet
3、导出kubeadm集群部署自定义文件
kubeadm config print init-defaults > init.default.yaml
4、修改自定义文件
1、修改主节点IP-advertiseAddress
2、修改镜像源地址imageRepository
3、在networking下添加一条podSubnet
即 pod网段配置-不同网络插件默认网段不同 这里我们使用的是flannel网络插件
网段设置为 10.244.0.0/16
[root@master kube-system]# cat init.default.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.0.4
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: master
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.18.2
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
5、拉取阿里云kubernetes容器镜像
查看
kubeadm config images list --config init.default.yaml
拉取
kubeadm config images pull --config init.default.yaml
四 Master安装部署
运行初始化过程
kubeadm init --config=init.default.yaml
复制初始化master成功后返回的token
配置用户证书
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
查看集群状态
[root@master kube-system]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady master 2m9s v1.18.2
notready原因是没有安装pod网络
安装网络插件
- flannel网络插件
cd ~ && mkdir flannel && cd flannel
curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
修改配置文件kube-flannel.yml
这里的IP网段要和前面init.default.yaml中的pod网段一致
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
添加 你本机的网卡名
- name: kube-flannel
image: quay.io/coreos/flannel:v0.12.0-amd64
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=ens33
# 1.12版本的kubeadm额外给node1节点设置了一个污点(Taint):
#即如果节点还没有ready之前,是不接受调度的。可是如果Kubernetes的网络插件还没有部署的话,节点是不会进入ready状态的
#因此修改以下kube-flannel.yaml的内容,加入对node.kubernetes.io/not-ready:NoSchedule这个污点的容忍:
tolerations:
- operator: Exists
effect: NoSchedule
- key: node.kubernetes.io/not-ready
operator: Exists
effect: NoSchedule
启动flannel
kubectl apply -f ~/flannel/kube-flannel.yml
- calico网络插件
kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml
Calico是网络和网络策略提供商。Calico支持一组灵活的网络选项,因此您可以根据情况选择最有效的选项,包括使用或不使用BGP的非覆盖和覆盖网络。Calico使用同一引擎对服务网格层上的主机,pod和(如果使用Istio&Envoy)应用程序执行网络策略。印花布适用于多种架构,包括amd64
,arm64
,和ppc64le
。
默认情况下,192.168.0.0/16
尽管可以在calico.yaml文件中配置,但Calico 用作Pod网络CIDR。为了使Calico正常工作,您需要kubeadm init
使用该--pod-network-cidr=192.168.0.0/16
标志或通过kubeadm的配置将此相同的CIDR传递给命令。
五、所有node节点上操作,加入集群
开启ip转发功能
sysctl -w net.ipv4.ip_forward=1
在所有node节点操作,执行 初始化master成功后返回的结果命令
kubeadm join 192.168.0.4:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:58292461c8034492fb9c573637de5e88d857ea434c8421565a9c340ef423a793
master上查看nodes的信息
[root@master flannel]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 65m v1.18.2
node2 Ready <none> 54m v1.18.2
node3 Ready <none> 54m v1.18.2
node4 Ready <none> 54m v1.18.2
网友评论