云原生技术容器编排学习(第五集)

Posted 技术能量站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生技术容器编排学习(第五集)相关的知识,希望对你有一定的参考价值。

1、系统环境

1.1 系统基本信息查看

// Linux查看版本当前操作系统内核信息
uname -a
// Linux查看当前操作系统版本信息
cat /proc/version
// Linux查看版本当前操作系统发行版信息
cat /etc/redhat-release

1.2 系统配置

// 设置主机名
hostnamectl set-hostname foxk8s

// 设置域名解析 host
cat <<EOF >>/etc/hosts
192.168.0.254 foxk8s
EOF

// 关闭防火墙 、selinux和swap
systemctl disable firewalld --now

setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

swapoff -a
echo "vm.swappiness = 0">> /etc/sysctl.conf

sed -i 's/.*swap.*/#&/' /etc/fstab
sysctl -p

// 配置内核参数,将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

1.3 安装 kubelet, kubectl, kubeadm

在生产环境上,例如 centos linux系统上,使用 kubelet, kubectl, kubeadm 三件套可以部署 k8s 集群。
kubeadm不管kubelet和kubectl,所以我们需要手动安装kubelet和kubectl:

yum install -y kubeadm kubelet kubectl  --disableexcludes=kubernetes
  • Kubelet:负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
  • Kubeadm:是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
  • Kubectl:是Kubernetes集群管理工具。

最后启动kubelet:

systemctl enable kubelet --now 

2、部署节点

2.1 部署master (foxk8s) 节点

在安装过程中我们发现安装的是 1.16.2版本
kubeadm version

(1)镜像下载
执行 kubeadm config images list 命令就会输出如下所需版本

k8s.gcr.io/kube-apiserver:v1.16.2
k8s.gcr.io/kube-controller-manager:v1.16.2
k8s.gcr.io/kube-scheduler:v1.16.2
k8s.gcr.io/kube-proxy:v1.16.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2

(2)在master进行Kubernetes集群初始化

kubeadm init --kubernetes-version=1.16.2 \\
--apiserver-advertise-address=192.168.0.254 \\
--image-repository=registry.aliyuncs.com/google_containers \\
--service-cidr=10.1.0.0/16 \\
--pod-network-cidr=10.244.0.0/16
  1. –kubernetes-version: 用于指定k8s版本;
  2. –apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。
  3. –pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16
  4. –service-cidr:用于指定SVC的网络范围;
  5. –image-repository: 指定阿里云镜像仓库地址

这一步很关键,由于kubeadm 默认从官网 k8s.grc.io下载所需镜像,国内无法访问,因此需要
通过–image-repository指定阿里云镜像仓库地址

集群初始化成功后返回如下信息:
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.254:6443 --token kehvmq.e33d33lgkrm8h0rn \\
    --discovery-token-ca-cert-hash sha256:6150e7960c44890d5dd6b160bbbb4bfa256023db22f004b54d27e1cca72b0afc 

根据以上结果,还要操作一些任务

(3)修改kubernetes服务 nodeport 类型的端口范围

只有 Kubernetes集群初始化 完成后才能修改端口范围

  • 默认端口范围:30000-32767
  • 如果只使用这些,那么不用修改

修改方法:https://blog.csdn.net/fenglailea/article/details/91869648

(4)配置kubectl工具

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

(5)部署flannel网络

cd ~
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  -O kube-flannel.yml
或
wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml -O kube-flannel.yml

kubectl apply -f kube-flannel.yml

来源:https://github.com/coreos/flannel

注意: 如果上面自定义了pod ip [–pod-network-cidr=10.244.0.0/16]
范围,这里需要修改·kube-flannel.ym·l的net-conf.json, 把 10.244.0.0 修改为 你改动的范围。

2.2 查看状态

  1. 查看 nodes
    kubectl get nodes
    如果你的环境迟迟都是NotReady状态,可以kubectl get pod -A看一下pod状态,一般可以发现问题,比如flannel的镜像下载失败啦~当node Ready的时候,我们可以看到pod也全部ready了:
  2. 查看cs
    kubectl get cs

伪集群状态检测

在master节点输入命令检查集群状态,返回如下结果则集群状态正常
kubectl get nodes
重点查看STATUS内容为Ready时,则说明集群状态正常。

2.3 创建Pod以验证集群是否正常。

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

如果是单机版请看后面的最后配置 单机版 k8s配置

// 测试删除nginx
kubectl delete pod nginx
kubectl delete svc nginx

// 启动和开机启动
#开机启动
systemctl enable kubelet 
#启动
systemctl start kubelet

3、部署 dashboard

在master节点上进行如下操作

// 拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

3.1 创建Dashboard的yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml -O kubernetes-dashboard.yaml

sed -i "160a \\ \\ \\ \\ \\ \\ nodePort: 30001" kubernetes-dashboard.yaml

sed -i "161a \\ \\ type:\\ NodePort" kubernetes-dashboard.yaml

备注
s/k8s.gcr.io/loveone/g 因为墙,所以要更改能访问的
160a \\ \\ \\ \\ \\ \\ nodePort: 30001 增加外部访问端口
161a \\ \\ type:\\ NodePort 增加可外部访问

150行到164行代码如下

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard

3.2 部署dashboard

kubectl create -f kubernetes-dashboard.yaml
如果你部署错误了,那么可以删除 重新来过 kubectl delete -f kubernetes-dashboard.yaml

创建完成后,检查相关服务运行状态

kubectl get deployment kubernetes-dashboard -n kube-system

kubectl get pods -n kube-system -o wide

kubectl get services -n kube-system

ss -ntlp|grep 30001

3.3 浏览器访问

浏览器输入Dashboard访问地址:
https://192.168.0.254:30001
访问成功后,是要选择令牌的,填入 令牌 token 才能进入。令牌怎么来,看如下获取

3.4 查看设置访问Dashboard的认证令牌

// 创建 serviceaccount
kubectl create serviceaccount dashboard-admin -n kube-system
// 绑定 权限
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
// 获取令牌
kubectl describe secrets \\
-n kube-system $(kubectl -n kube-system get secret | awk '/admin/print $1')

输出如下

====
priv:  1679 bytes
pub:   459 bytes


Name:         kubernetes-dashboard-token-lhs57
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: 0c9e6220-8d8f-11e9-8c09-4cedfbc99721

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1saHM1NyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjBjOWU2MjIwLThkOGYtMTFlOS04YzA5LTRjZWRmYmM5OTcyMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.aQbqiVwqZvAIXuHSD72SNSqVSp55nkhy3YP_x_zV3ZMYQPW5geg_uH6OzCI11D5Iu_WJdFTl0rl9t12NfUkZWDiv9ghzoP-pDpJtKeEWZAq3pb_cLFyUmVcUsjuw7BNf0RUowBM3ukfYLHhwhNROjf-W6RAPj1Kp0O9xsMghDjMHZyASutz3XnmZvTrkDKvs-vTg-aSk9Jv6jt3Kat35_ufGVf80CJbhbPzd7CvaLS_03olv0veueup95Qm6mo5Mai1lYbaKeYGpC0hwi8aEpqZafni6MsxJWZt0sXZJiiclqJ7GoN9FRv1EXXGQ1Vcea6Ks7VQpDuz4woNhJdPppQ

要找到 kubernetes-dashboard的令牌token: 后面内容 就是需要的数据。

3.5 使用输出的token登录Dashboard

在浏览器中 选择令牌,把令牌 填入,点击登录,认证通过后,登录Dashboard首页

4、单机版 k8s

默认 Master Node不参与工作负载,所以 要配置让Master工作,请安如下2步操作

4.1 查看

kubectl describe node foxk8s | grep Taints
或
kubectl describe node -A | grep Taints

去掉 taint , 这样 单机 k8s 就能部署各种东东了

kubectl taint nodes --all node-role.kubernetes.io/master-
或
kubectl taint nodes foxk8s node-role.kubernetes.io/master-

再查看就好了,输出结果 Taints: <none>

kubectl describe node foxk8s | grep Taints
或
kubectl describe node -A | grep Taints

以上是关于云原生技术容器编排学习(第五集)的主要内容,如果未能解决你的问题,请参考以下文章

云原生技术容器编排学习(第四集)

云原生容器编排技术Docker Compose

云原生容器技术 4 云原生容器技术概要介绍-容器编排技术基础-Kubernetes

云原生学习之一:微服务

『 云原生·Docker』Docker-compose 容器编排

云原生架构到底是个啥?