1. Kubernetes部署
这⾥安装⽬前的版本是 v1.22.3,这⾥主要⽬的也是学习,Kubernetes 的⼀些知识点,所以采⽤的是 Kubeadm 来快速搭建单Master 的集群,等后续掌握了整个Kubernetes的常⽤资源后,在来搭建⾼可⽤Kubernetes。

1.1 环境准备(所有节点执行)
1.1.1 主机名解析
echo "10.0.0.201 master" >> /etc/hosts
echo "10.0.0.204 node01" >> /etc/hosts
echo "10.0.0.205 node02" >> /etc/hosts
echo "10.0.0.206 node03" >> /etc/hosts
1.1.2 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
1.1.3 关闭Swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
1.1.4 内核修改
modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
1.1.5 安装IPVS
yum install ipset ipvsadm -y
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
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
1.1.6 时间同步
yum install chrony -y
systemctl enable chronyd --now
chronyc sources
1.2 安装集群组件(所有节点执行)
需要在所有节点上安装Docker、kubelet、kubectl、kubeadm
1.2.1 安装Docker(所有节点执行)
# 1、配置Docker的yum源
yum remove docker*
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 2、安装Docker,并配置镜像加速
yum install -y docker-ce-19.03.15
mkdir -p /etc/docker && tee /etc/docker/daemon.json <<-EOF
{
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload && systemctl enable docker --now
1.2.2 安装集群工具(所有节点都需要安装)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.22.3 kubeadm-1.22.3 kubectl-1.22.3
kubeadm version
systemctl enable kubelet --now
注释: 这个时候kubelet并没有启动成功,因为集群并没有初始化好
1.3 集群初始化
1.3.1 下载docker镜像组件 (只有master节点下载下面的组件)
# 通过命令获取对应集群需要使用的容器镜像
[root@master ~]# kubeadm config images list --kubernetes-version v1.22.3
k8s.gcr.io/kube-apiserver:v1.22.3
k8s.gcr.io/kube-controller-manager:v1.22.3
k8s.gcr.io/kube-scheduler:v1.22.3
k8s.gcr.io/kube-proxy:v1.22.3
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
[root@master ~]# kubeadm config images list --image-repository oldxu3957 --kubernetes-version v1.22.3
oldxu3957/kube-apiserver:v1.22.3
oldxu3957/kube-controller-manager:v1.22.3
oldxu3957/kube-scheduler:v1.22.3
oldxu3957/kube-proxy:v1.22.3
oldxu3957/pause:3.5
oldxu3957/etcd:3.5.0-0
oldxu3957/coredns:v1.8.4
# 使用kubeadm config images pull进行镜像下载
oldxu3957是dockerhub仓库下载镜像
registry.cn-huhehaote.aliyuncs.com/oldxu3957 阿里云仓库下载镜像
# 下载镜像
kubeadm config images pull --image-repository oldxu3957 --kubernetes-version v1.22.3
1.3.2 初始化Master节点(只在master上执行,初始话的时候如果本地已经有镜像直接用本地的镜像)
kubeadm init \
--apiserver-advertise-address=10.0.0.201 \
--image-repository oldxu3957 \
--kubernetes-version v1.22.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
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 nodes
1.3.3 初始化Nodes节点 (只在node节点上执行)
kubeadm join 10.0.0.201:6443 --token spfa4q.qvdmvjqnc3j1inte \
--discovery-token-ca-cert-hash sha256:433694edd4c88e91908fc442d38db0c5f4e1eba230d296e6f0271ba7dcdc22eb
如果想让node节点执行kubectl get nodes需要执行
[root@node01 ~]# mkdir /root/.kube
[root@master ~]# scp /etc/kubernetes/admin.conf root@10.0.0.204:/root/.kube/config
# 集群初始化的时候CoreDNS kube-proxy已经安装完成
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
1.3.4 安装Flannel网络插件(只在master上执行)
# 下载插件
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 修改插件分配的地址范围
sed -i 's#10.244.0.0/16#192.168.0.0/16#g' kube-flannel.yml
# 应用插件
kubectl apply -f kube-flannel.yml
# 查看node状态
kubectl get nodes
kubectl get pod -n kube-flannel
1.3.5 集群命令自动补全
[root@master ~]# yum install bash-completion -y
[root@master ~]# echo 'source <(kubectl completionbash)' >>~/.bashrc
1.4 集群状态测试
1.4.1 检查节点运行的Pod
[root@master ~]# kubectl get pod -n kube-system
1.4.2 创建资源测试集群
kubectl create deployment nginx --image=nginx --replicas=3
# 平均的分布在三个node节点
kubectl get pod -o wide
# 暴露端口
kubectl expose deployment nginx --port=8080 --target-port=80
# 10.96.52.129:8080可以访问到nginx应用
[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h
nginx ClusterIP 10.96.52.129 <none> 8080/TCP 18s
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-8l7z5 1/1 Running 0 7m10s
nginx-6799fc88d8-mlbw9 1/1 Running 0 7m10s
nginx-6799fc88d8-xfz2t 1/1 Running 0 7m10s
1.4.3 检查ip连通性
# 检查各node上的pod ip连通性
kubectl get pods -o wide
# 再每个节点上ping pod ip
ping <pod-ip>
# 检查service可达性
kubectl get svc
# 在每个节点访问服务
curl 10.96.52.129:8080
1.4.4 检查dns可用性
# 创建一个负载均衡(10.96.52.129),就一定会创建一个同名dns的A记录(nginx)
[root@master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h12m
nginx ClusterIP 10.96.52.129 <none> 8080/TCP 12m
# 进入pod,查看dns
[root@master ~]# kubectl exec -it nginx-6799fc88d8-8l7z5 -- /bin/bash
# 查看dns
root@nginx-6799fc88d8-8l7z5:/# cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
cat /etc/resolv.conf
# 查看名字是否可以正确解析
root@nginx-6799fc88d8-8l7z5:/# curl nginx.default.svc.cluster.local:8080
# 验证负载均衡功能,修改三个节点的nginx,然后进行访问
[root@master ~]# kubectl exec -it nginx-6799fc88d8-8l7z5 -- /bin/bash
root@nginx-6799fc88d8-8l7z5:/# echo 'nginx1' > /usr/share/nginx/html/index.html
[root@master ~]# kubectl exec -it nginx-6799fc88d8-mlbw9 -- /bin/bash
root@nginx-6799fc88d8-mlbw9:/# echo nginx2 > /usr/share/nginx/html/index.html
root@master ~]# kubectl exec -it nginx-6799fc88d8-xfz2t -- /bin/bash
root@nginx-6799fc88d8-xfz2t:/# echo nginx3 > /usr/share/nginx/html/index.html
# 验证是否出现负载均衡
[root@master ~]# curl 10.96.52.129:8080
1.4.5 检查日志功能
kubectl get pods
kubectl logs nginx-6799fc88d8-mlbw9
使用kubeadm去初始化集群,然后安装flannel插件
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
现在集群是ready状态,使用kubectl get pod -n kube-system查看,flannel没有对应的pod,这是什么问题?
kube-flannel的pod没有在命令空间kube-system,而是在单独的kube-flannel
[root@master ~]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
405

被折叠的 条评论
为什么被折叠?



