k8s-安装
K8S环境
1. docker
移出docker相关的包:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
配置yum源:
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker:
# yum install -y docker-ce docker-ce-cli containerd.io
yum install -y docker
基础环境
IP | 节点名称 | 域名 |
---|---|---|
10.1.2.111 | k8s-master-1 | master01.k8s.io |
10.1.2.112 | k8s-master-2 | master02.k8s.io |
10.1.2.113 | 非节点,vip | |
10.1.2.180 | k8s-node-1 | |
10.1.2.181 | k8s-node-2 | |
10.1.2.182 | k8s-node-3 | |
10.1.2.190 | k8s-harbor |
修改节点名称
#各个机器设置自己的域名
hostnamectl set-hostname xxxx
//例如,在master机子中: hostnamectl set-hostname k8s-master
在node节点机子中:hostnamectl set-hostname k8s-node1
#并且在master上写虚拟机/etc/hosts文件
增加/etc/hosts
cat >> /etc/hosts << EOF
10.1.2.111 k8s-master-1 master01.k8s.io
10.1.2.112 k8s-master-2 master02.k8s.io
10.1.2.113 k8s-cluster-endpoint
10.1.2.180 k8s-node-1
10.1.2.181 k8s-node-2
10.1.2.182 k8s-node-3
EOF
复制到其他机器上
scp /etc/hosts root@10.1.2.112:/etc/hosts
scp /etc/hosts root@10.1.2.180:/etc/hosts
scp /etc/hosts root@10.1.2.181:/etc/hosts
scp /etc/hosts root@10.1.2.182:/etc/hosts
关闭selinux,swap(集群必须关闭),允许iptables检查桥接流量,必要的话还需要关闭防火墙
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system # 生效
systemctl stop firewalld
systemctl disable firewalld
# 时间NTP同步
3. 安装k8s
cat <<EOF | sudo tee /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
exclude=kubelet kubeadm kubectl
EOF
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
拉取必要的镜像
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
至此,k8s环境已经准备就绪,可以开始搭建集群。
5. 离线安装k8s
流程:
-
有多台虚拟机
-
操作系统初始化
-
为etcd和apiserver安装自签证书
-
部署ETCD存储集群
-
部署master组件
docker,kube-apiserver,kube-controller-manager,kube-scheduler,etcd -
部署node组件
kube-proxy,kubelet,docker,etcd -
部署集群网络
相对来说比较复杂,这里就不写了。
6. 调度策略
-
资源调度对节点调度的影像
-
节点选择器nodeSelector对pod的调度
通过节点选择器能够进行分组发布pod,实现灰度发布,这个过程需要给节点起一个label:
kubectl label node k8s-node1 env_role=dev
7. 节点亲和性满足(affinity)
-
硬亲和性
-
软亲和性
- 污点和污点容忍
可以通过
kubectl describe node k8s-master |grep Taint
8. k8s的一些基础名词
8.1 deployment
-
在集群上管理和运行容器的对象
-
Pod通过controller实现应用的运维比如伸缩滚动升级等
-
Pod和Controller是通过label来维持关系的
deployment应用场景:
- 部署无状态应用
- 管理Pod和ReplicaSet
- 部署,滚动升级等功能
- 应用场景:web服务,微服务
可以通过命令生成yaml文件:
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml
使用deployment部署应用
kubectl apply -f web.yaml
当然也有对外暴露的端口号,生成yaml:
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web -o yaml > web.yaml # 对外暴露端口,80到80
升级回滚:
# 从1.14.升级到1.15
kubectl set image deployment web nginx=nginx:1.15
# 查看升级版本
kubectl rollout status deployment web
# 查看历史版本
kubectl rollout history deployment web
# 回滚版本
kubectl rollout undo deployment web
kubectl rollout undo deployment web --to-reversion=2
弹性伸缩
kubectl scale deployment web --replicas=10 # 增加十个副本
8.2 service
-
防止pod失联
-
定义一组Pod的访问策略,就是负载均衡
-
service是通过label和selector,进行与Pod的关系的
-
service本身也会对外暴露一个VIP
service常用的字段
-
ClusterIP:集群内部ip使用
-
NodePort:对外访问应用使用
-
LoadBalancer:对外访问应用使用,主要是公有云的
外部怎么访问service呢?
一般可以用NodePort,当然也可以用LoadBalancer