部署Kubernetes集群

环境准备

角色 IP
master 192.168.46.130
node1 192.168.46.131
node2 192.168.46.xxx

设置主机名

# master节点的主机名
hostnamectl set-hostname k8s-master
# node1节点的主机名
hostnamectl set-hostname k8s-node1
# node2节点的主机名
hostnamectl set-hostname k8s-node2

注:修改也可使用vim /etc/hostname,打开文件进行修改;
查看当前的hostname可使用cat /etc/hostname,也可使用hostnamehostnamectl

配置 hosts

vim /etc/hosts
# 添加以下内容
192.168.46.130 k8s-master
192.168.46.131 k8s-node1
192.168.46.xxx k8s-node2

注:查看设置可使用命令cat /etc/hosts | grep k8s

确认MAC和product_uuid的唯一性

# 查看MAC
ip link
# ifconfig -a
# 查看product_uuid
cat /sys/class/dmi/id/product_uuid

添加 IP 路由规则

由于是本地内网测试环境,直接关闭了防火墙。若安全要求较高, 可以参考官方文档放行必要端口

# 关闭服务
systemctl stop firewalld
# 禁用服务
systemctl disable firewalld

禁用交换分区

vim /etc/fstab
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

将swap注释掉

转发 IPv4 并让 iptables 看到桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system

安装Kubernetes

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

将 SELinux 设置为 permissive 模式(相当于将其禁用)

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。

部署Kubernetes Master

sudo kubeadm init \
--apiserver-advertise-address=192.168.46.130 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

--apiserver-advertise-address
指定api地址,这里配置成了master的私网接口IP,例如我的Master主机的IP是:192.168.180.123

--image-repository
这个是镜像地址,由于国外地址无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/google_containers

--kubernetes-version
这个参数指定要安装的k8s版本

--service-cidr
这个参数后的IP地址直接就套用10.96.0.0/12 ,以后安装时也套用即可,不要更改

--pod-network-cidr
k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16

等待执行完毕后, 会输出如下内容:

...
Your Kubernetes control-plane has initialized successfully!
...

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.46.130:6443 --token s9gac1.xm93o2f84tuxr375 \
        --discovery-token-ca-cert-hash sha256:a362b29d7248baaac0c73d18c242623e22a2366936c86487d9fc3e9665c76e7e

最后两行需要保存下来, kubeadm join ...是slave节点加入所需要执行的命令.

接下来配置环境, 让当前用户可以执行kubectl命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

测试一下

kubectl get node

节点为notready状态,通过以下命令查看

kubectl describe node k8s-master | grep network

配置网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

部署 Nginx

查询镜像

docker search nginx

没有则拉取

docker images

执行安装

kubectl create deployment nginx --image=nginx

查看状态

kubectl get pod

查看service服务

kubectl get svc

容器编排

kubectl expose deployment nginx --port=80 --type=NodePort
posted @ 2023-03-13 17:07  卡尔的思索  阅读(11)  评论(0编辑  收藏  举报