文章目录
安装方法
minikube
有提供在线操作机器,可在线执行命令进行验证
https://kubernetes.io/docs/tutorials/hello-minikube/
kind
可部署本地的单机kubernetes
https://kind.sigs.k8s.io
kubeadm
当前较常用的方法,可通过 kubeadm init 和 kubeadm join 两个命令方便快捷的搭建k8s集群。
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
二进制
较为繁琐,适合离线环境下的安装,但需要对k8s较为熟悉,涉及较多服务及安装包。可从github下载发行版的二进制包
https://github.com/kubernetes/
yum
yum源在线安装k8s的各个组件,yum下载的版本较老,已很久未维护,用得较少。
环境要求
- CentOS7.x
- 2cpu 2mem
- 集群机器之间通讯正常
- 可访问外网,镜像仓库
- 禁止使用swap分区
安装准备
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
setenforce 0
vi /etc/selinux/config
SELINUX=disabled
添加hosts映射地址
cat /etc/hosts
192.168.139.131 master
192.168.139.132 node1
192.168.139.133 node2
网桥设置
创建/etc/sysctl.d/k8s.conf文件,添加如下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
执行命令使修改生效。
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
关闭 swap
关闭系统的Swap方法如下:
swapoff -a
修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载,使用free -m确认swap已经关闭。
swappiness参数调整,修改/etc/sysctl.d/k8s.conf添加下面一行:
vm.swappiness=0
使修改生效。
sysctl -p /etc/sysctl.d/k8s.conf
时间同步(可选)
yum install ntpdate -y
ntpdate time.windows.com
安装k8s
安装docker
https://blog.csdn.net/NYTWTYN/article/details/119202934?spm=1001.2014.3001.5502
添加 k8s 的 阿里云 yun 源
cat <<EOF > /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
EOF
安装 kubeadm\kubelet\kubectl
yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y
systemctl enable kubelet.service
注册 master
kubeadm init --apiserver-advertise-address=192.168.139.131 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
- service-cidr 服务通讯子网
- pod-network-cidr pod 网络
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
添加 node
添加node的命令在master节点执行完 kubeadm init 命令后的输出打印获取
kubeadm join 192.168.139.131:6443 --token fmrnu0.31m6d4smn2999vek \
--discovery-token-ca-cert-hash sha256:c628ef31874eb79adb8764a91c0438d24676e7c8040ff6d760804b2432332458
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 6m30s v1.19.4
node1 NotReady <none> 20s v1.19.4
node2 NotReady <none> 28s v1.19.4
删除node
如需从集群中移除node2,可执行以下步骤操作
1. 在master节点上执行:
kubectl drain k8s-node --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node
2. 在node2上执行:
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
3. 在node1上执行:
kubectl delete node node2
安装k8s网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
上述地址可能连接失败,可直接到github上找到 flannel 对应的项目,找到对应文件。
或自行创建 kube-flannel.yml 文件并写入以下内容
https://blog.csdn.net/NYTWTYN/article/details/118936440?spm=1001.2014.3001.5502
kubectl apply -f kube-flannel.yml
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 84m v1.19.4
node1 Ready <none> 78m v1.19.4
node2 Ready <none> 78m v1.19.4
配置kube-proxy开启ipvs
kubectl edit cm kube-proxy -n kube-system
编辑配置文件kube-system/kube-proxy中的config.conf,修改 mode:“ipvs”,保存后退出编辑
之后重启各个节点上的kube-proxy pod(一般在master节点执行即可)
kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
查看重新启动的kube-proxy信息
[root@master ~]# kubectl get pod -n kube-system | grep kube-proxy
kube-proxy-f9rnj 1/1 Running 0 39s
kube-proxy-q6hks 1/1 Running 0 44s
[root@master ~]# kubectl logs kube-proxy-f9rnj -n kube-system
I0822 09:49:35.870937 1 server_others.go:170] Using ipvs Proxier.
W0822 09:49:35.871397 1 proxier.go:401] IPVS scheduler not specified, use rr by default
I0822 09:49:35.872146 1 server.go:534] Version: v1.15.3
日志中打印出了Using ipvs Proxier,说明ipvs模式已经开启。
测试-安装nginx服务
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
80为nginx容器内提供服务的端口,注意需要 STATUS为Running 状态时才可执行端口暴露命令,因Running状态才是完成的包括 镜像拉取,创建docker容器 等操作。
kubectl get pod,svc
获取容器80端口对应的主机端口
[root@master ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-6799fc88d8-shpkl 1/1 Running 0 110s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h32m
service/nginx NodePort 10.98.228.233 <none> 80:30274/TCP 3s
访问:http://NodeIP:Port
NodeIP 为任意一个节点IP,master或node都可。
kubectl create deployment nginx --image=nginx --dry-run -o yaml >> nginx.yml
可不创建pod而生成一个yml文件,后续可通过这个yml文件创建pod。输出也支持json。
kubectl apply -f nginx.yml
安装DashBoard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
kubectl get pod -n kubernetes-dashboard
获取token
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $( kubectl -n kube-system get secrets |awk '/dashboard-admin/{print $1}')
后续如需再次获取token,只需执行第三条命令,建议保存为一个 sh 文件,方便后续执行。
通过 dashboard 的服务暴露端口,即可登录访问,注意使用 https ,登录的 token 获取请见上述步骤。
K8S 基础安装完成,可开始使用。
如需配置kubectl命令补全,可参照以下链接:
kubectl 命令补全配置
如需配置使用域名访问容器服务,可参照以下链接:
Ingress-nginx 安装使用