1、前期准备
1.1关闭swap交换分区
1.2关闭防火墙
1.3关闭selinux
1.4做好ip解析
1.5装好docker并设置为开机自启动
curl -fsSL https://get.docker.com/ | sh
1.6、修改docker Cgroup
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
2、安装 kubeadm、kubelet 和 kubectl(每一台机器)
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
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
systemctl enable kubelet
3、部署master
kubeadm init --apiserver-advertise-address=10.14.21.188 --pod-network-cidr=10.14.0.0/16
#非root用户启动
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#root用户启功
export KUBECONFIG=/etc/kubernetes/admin.conf
#node执行
kubeadm join 10.14.23.109:6443 --token 5elpv0.e01c2qje36v8ersz \
--discovery-token-ca-cert-hash sha256:edec59a625315804ad79c7235c7c88d400f391bcc0e843194127db841cd8f440
4、将桥接的ipv4流量传递到iptables
cat /etc/sysctl.d/k8s.conf #自己创建
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system
5、master安装flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#kubectl自动补全
#1:安装bash-completion:
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
#2:应用kubectl的completion到系统环境:
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
k8s 操作label
增
kubectl label nodes node_name node-role.kubernetes.io/work=worker
kubectl label nodes node-1 node-role.kubernetes.io/work=node-1
#worker 是你为节点做的标记
删
#删除一个Label,只需在命令行最后指定Label的key名并与一个减号相连即可
kubectl label nodes node-role.kubernetes.io/worker-
改
#增加方法的基础上 使用--overwrite 参数
kubectl label nodes node_name node-role.kubernetes.io/worker=test --overwrite
#或者直接修改配置
kubect edit nodes nodename
1、network: open /run/flannel/subnet.env: no such file or directory
没有就添加文件,在每一个节点上
[root@master ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.14.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
k8s启动nginx-pod示例
vim nginx.yaml
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源的类型/角色,deployment为控制器
metadata: #定义资源的元数据信息
name: nginx-test #定义资源的名称,在同一个namespace空间中必须是唯一的
labels: #定义资源标签
app: nginx
spec:
replicas: 3 #定义副本数量
selector: #定义选择器
matchLabels: #匹配上面的标签
app: nginx #匹配模板名称
template: #定义模板
metadata:
labels:
app: nginx
spec:
containers: #定义容器信息
- name: nginx #容器名,与标签名要相同
image: nginx:1.15.4 #容器使用的镜像以及版本
ports:
- containerPort: 80 #定义容器的对外端口
nodeSelector: #定义节点标签信息,指明容器启动节点
node: node-1
#kubelet apply -f nginx.yaml