背景:
- 不会docker、k8s的开发不是好运维,啥都不说了,开撸!
实验环境:
- 两台阿里云主机,一个maser,一个node。
- Centos7.6
- 科学上网
本实验用的是官方推荐的快速安装 Kubernetes 集群的工具kubeadm。
基础环境配置
1.修改主机名
hostnamectl set-hostname kube-master
hostnamectl set-hostname kube-node
2.停用防火墙
systemctl stop firewalld
-
3.关闭SELinux
setenforce 0
sed -i “s/^SELINUX=permissive/SELINUX=disabled/g” /etc/selinux/config
4.加载br_netfilter
-
5.添加配置内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
6.加载配置
sysctl -p /etc/sysctl.d/k8s.conf
7.安装docker
安装的最新版本18.09.4
yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce systemctl start docker && systemctl enable docker
8.安装kubeadm,kubelet,kubectl
cat <<EOF > /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
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
9.下载master所需镜像
- kubeadm config images pull —kubernetes-version v1.14.0
- docker images
10.初始化master
- 创建kubeadm的yaml文件
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
controllerManager:
extraArgs:
horizontal-pod-autoscaler-use-rest-clients: "true"
horizontal-pod-autoscaler-sync-period: "10s"
node-monitor-grace-period: "10s"
apiServer:
extraArgs:
runtime-config: "api/all=true"
kubernetesVersion: "stable-1.14"
- kubeadm init —config kubeadm.yaml(注意,初始化完成后,master的部署就完成了,部署完成后,kubeadm 会生成一行指令:)
kubeadm join 172.31.76.223:6443 --token y0ad6b.i9j4qut76pof5o4m --discovery-token-ca-cert-hash sha256:2801e639c2fbacc5a09fe29117c775dab4ecabec485177b5305e98930a5ae0cc
- 这个 kubeadm join 命令,是用来给这个Master 节点添加更多工作节点(Worker)的命令。
- 注意:token的有效期为24h,超时后会失效,node就无法加入集群,可通过kubeadm token create —print-join-command命令重新获取token加入
需要这些配置命令的原因是:Kubernetes 集群默认需要加密方式访问。所以,这几条命令,就是将刚刚部署生成的Kubernetes 集群的安全配置文件,保存到当前用户的.kube 目录下,kubectl 默认会使用这个目录下的授权信息访问 Kubernetes 集群。如果不这么做的话,我们每次都需要通过export KUBECONFIG 环境变量告诉kubectl 这个安全配置文件的位置。mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
加入worker节点
kubectl apply -f https://git.io/weave-kube-1.6 weave安装
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- dashboard可视化插件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
vi kubernetes-dashboard.yaml
kubectl apply -f kubernetes-dashboard.yaml
dashboard修改如下:
本地访问dashboard:
- 由于安全问题,1.7版本以后的dashboard本地访问默认只能通过proxy的方式。
- 本地访问命令:kubectl proxy —address=’0.0.0.0’ —accept-hosts=’^*$’ —disable-filter=true
打开浏览器,访问页面如下:
通过token方式进行登录:
- 获取token命令:
- kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
登录后页面如下:
rook存储插件
git clone https://github.com/rook/rook.git cd rook/cluster/examples/ kubernetes/ceph/ kubectl create -f common.yaml(先运行此命令,否则执行后面两条会报错) kubectl create -f operator.yaml kubectl create -f cluster.yaml kubectl -n rook-ceph get pod
Kubernetes命令:
- kubectl get pods 查看运行的pod
- kubectl get nodes 查看node信息
- kubectl delete pod nginx-65f88748fd-4ghwb 删除pod
- kubectl delete deployment nginx 删除deployment(删除pod时,必须删除deployment)
- kubectl create -f nginx.yaml 创建resource
- kubectl scale deploy nginx-deployment —replicas=2 扩缩容副本