网络服务之k8s的部署
前置准备
1、所有机器关闭防火墙
bash
1
2
3systemctl stop firewalld #关闭
systemctl disable firewalld #开机不自启
systemctl status firewalld #查看状态
2、所有机器关闭selinux
bash
1
2sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
3、所有机器关闭swap
bash
1
2swapoff -a # 临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
4、所有机器上添加主机名与ip的对应关系
bash
1
2
3
4
5
6
7
8vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.103.101 k8s-master
192.168.103.102 k8s-node1
192.168.103.103 k8s-node2
5、在所有主机上将桥接的ipv4流量传递到iptables的链
bash
1
2
3
4cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
为所有节点安装docker
1 | yum install wget.x86_64 -y |
集群部署
1、为所有节点修改仓库,安装kubeadm、kubelet、kubectl
1 | cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
2、修改docker的配置(所有节点)
cat > /etc/docker/daemon.json <<’EOF’
{
“exec-opts”: [“native.cgroupdriver=systemd”]
}
EOF
systemctl daemon-reload
systemctl restart docker.service
systemctl restart kubelet.service
systemctl status kubelet.service
3、部署master节点(主节点k8s-master)
kubeadm init
–apiserver-advertise-address=192.168.103.101
–image-repository registry.aliyuncs.com/google_containers
–kubernetes-version v1.22.2
–control-plane-endpoint k8s-master
–service-cidr=172.16.0.0/16
–pod-network-cidr=10.244.0.0/16
记住需要保存好这段内容
kubeadm join k8s-master:6443 –token blja6l.uj72oz95v8eh7lil
–discovery-token-ca-cert-hash sha256:16b6cad3a7579655ee5c6a323b4505610d0c9abd0cfd749126c8aef6d2dbd75d
–control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-master:6443 –token qmez7o.rm6ztslz3w5p6ndl
–discovery-token-ca-cert-hash sha256:e0bb141e15f179c4b7baa6a1c4aef0d3b97d34dc047c318f1e04874106dca50b
4、按照指示执行
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
6、查看节点状态为notready
1 | kubectl get nodes |
安装网络插件,官方文档:https://github.com/flannel-io/flannel
1 | 注意在master节点进行 |
添加node节点
bash
1 | # 为node拉取网络插件镜像 |
kubeadm join k8s-master:6443 –token blja6l.uj72oz95v8eh7lil
–discovery-token-ca-cert-hash sha256:16b6cad3a7579655ee5c6a323b4505610d0c9abd0cfd749126c8aef6d2dbd75d
使用上方保存的内容增加节点
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 25m v1.22.2
k8s-node1 NotReady
k8s-node2 NotReady
检查确实已经添加
部署 Nginx 服务
将镜像预先加载到各节点(避免网络拉取失败):
1
2
3
4
5docker pull nginx:latest
docker save -o nginx_latest.tar nginx:latest
scp nginx_latest.tar node2:/root/
# 在 node2 加载
docker load -i nginx_latest.tar创建 Deployment:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 801
kubectl apply -f nginx-deployment.yaml
创建 Service(NodePort 方式):
1
2
3
4
5
6
7
8
9
10
11
12apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 327631
kubectl apply -f nginx-service.yaml
检查 Pod 状态:
1
kubectl get pods -o wide -w
访问即可
node2节点也可访问成功
注意:nginx服务不知道为何centos拉不下来从kali中获取后使用scp拉到centos中的






