世界熱頭條丨K8s安裝部署怎么操作?K8S集群安裝部署及操作說明
K8S集群安裝部署
(資料圖片)
一、系統基本環境搭建1.關閉swap2.關閉SELINUX3.調整內核參數4.調整系統時區5.關閉系統不需要的服務 二、安裝etcd1.創建證書文件2. 安裝etcd2.1 node1上操作2.2 node2上操作2.3 node3上操作 備注說明 三、安裝dockernode1節點node2節點node3節點 四、部署api-server(Master Node)1.創建apiserver自簽證書2.下載安裝包3.配置api-server配置文件4.創建token文件5.systemd 管理 apiserver6.啟動并設置開機啟動7.授權 kubelet-bootstrap 用戶允許請求證書 五、部署kube-controller-manager(Master Node)1. 創建配置文件2. systemd 管理 controller-manager3. 啟動并設置開機啟動 六、部署 kube-scheduler(Master Node)1. 創建配置文件2. systemd 管理 kube-scheduler3. 啟動并設置開機啟動 七、查看集群狀態八、部署 kubelet(Worker Node)1. 創建kubelet.conf配置文件2.配置kubelet-config.yml參數文件3.生成bootstrap.kubeconfig 配置文件4. systemd 管理 kubelet5. 啟動并設置開機啟動6.批準 kubelet 證書申請并加入集群 九、部署 kube-proxy1.創建kube-proxy.conf2.配置參數文件3.生成 kube-proxy.kubeconfig4.生成kubeconfig5. systemd 管理 kube-proxy6. 啟動并設置開機啟動 十、部署 CNI 網絡(Master Node)1.授權 apiserver 訪問 kubelet 十一、部署node3節點1. 拷貝已部署好的 Node 相關文件到新節點2. 刪除 kubelet 證書和 kubeconfig 文件3. 修改主機名4. 啟動并設置開機啟動5. 在 Master 上批準新 Node kubelet 證書申請 十二、驗證測試總結說明1.kubectl get node 不是Ready狀態
一、系統基本環境搭建
角色IP組件
node1192.168.24.136kube-apiserver, kube-controller-manager, kube-scheduler, etcd
node2192.168.24.137kubelet,kube-proxy,docker etcd
node3192.168.24.138kubelet,kube-proxy,docker etcd
1.關閉swap
[root@node1 ~]# swapoff -a[root@node1 ~]# vim /etc/fstab
2.關閉SELINUX
[root@node1 ~]# setenforce 0 && sed -i "s/^SELINUX=. */SELINUX=disabled/" /etc/selinux/config
3.調整內核參數
[root@node1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOFNET.BRIDGE.BRIDGE-NF-CALL-IPTABLES=1NET.BRIDGE.BRIDGE-NF-CALL-IP6TABLES=1EOF# 生效[root@node1="" ~]#="" sysctl="" --system
4.調整系統時區
#設置系統時區為中國/上海[root@node1 ~]# timedatectl set-timezone Asia/Shanghai#將當前的UTC時間寫入硬件時鐘[root@node1 ~]# timedatectl set-local-rtc 0#重啟依賴于系統時間的服務[root@node1 ~]# systemctl restart rsyslog[root@node1 ~]# systemctl restart crond
5.關閉系統不需要的服務
[root@node1 ~]# systemctl stop postfix && systemctl disable postfix
二、安裝etcd
1.創建證書文件
[root@localhost home]# mkdir /opt/TLS/etcd && cd /opt/TLS/etcd[root@localhost etcd]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64[root@localhost etcd]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64[root@localhost etcd]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd6[root@localhost etcd]# mkdir /usr/local/cfssl/[root@localhost etcd]# mv cfssl_linux-amd64 /usr/local/cfssl/[root@localhost etcd]# mv cfssljson_linux-amd64 /usr/local/cfssl/[root@localhost etcd]# mv cfssl-certinfo_linux-amd6 /usr/local/cfssl/[root@localhost etcd]# vim > ca-config.json<< EOF {"signing": {"default": {"expiry": "87600h"},"profiles": {"www": {"expiry": "87600h","usages": ["signing","key encipherment","server auth","client auth"]}}}}[root@localhost etcd]# vim ca-csr.json{"CN": "etcd CA", "key": {"algo": "rsa", "size": 2048 }, "names": [ {"C": "CN", "L": "Beijing", "ST": "Beijing" } ]}[root@localhost etcd]# vim server-csr.json{"CN": "etcd","hosts": ["192.168.24.136","192.168.24.137","192.168.24.138"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]}[root@localhost etcd]# /usr/local/cfssl/cfssl_linux-amd64 gencert -initca ca-csr.json | /usr/local/cfssl/cfssljson_linux-amd64 -bare ca -2021/06/30 23:30:35 [INFO] generating a new CA key and certificate from CSR2021/06/30 23:30:35 [INFO] generate received request2021/06/30 23:30:35 [INFO] received CSR2021/06/30 23:30:35 [INFO] generating key: rsa-20482021/06/30 23:30:36 [INFO] encoded CSR2021/06/30 23:30:36 [INFO] signed certificate with serial number 725059738840226310954172302162231768550676521910[root@localhost etcd]# [root@localhost etcd]# /usr/local/cfssl/cfssl_linux-amd64 gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | /usr/local/cfssl/cfssljson_linux-amd64 -bare server2021/06/30 23:39:25 [INFO] generate received request2021/06/30 23:39:25 [INFO] received CSR2021/06/30 23:39:25 [INFO] generating key: rsa-20482021/06/30 23:39:25 [INFO] encoded CSR2021/06/30 23:39:25 [INFO] signed certificate with serial number 4113968810751077352879574991605677378957980238632021/06/30 23:39:25 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable forwebsites. For more information see the Baseline Requirements for the Issuance and Managementof Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);specifically, section 10.2.3 ("Information Requirements").[root@localhost etcd]# [root@localhost etcd]# lltotal 36-rw-r--r-- 1 root root 226 Jun 30 23:26 ca-config.json-rw-r--r-- 1 root root 956 Jun 30 23:30 ca.csr-rw-r--r-- 1 root root 143 Jun 30 23:28 ca-csr.json-rw------- 1 root root 1679 Jun 30 23:30 ca-key.pem-rw-r--r-- 1 root root 1265 Jun 30 23:30 ca.pem-rw-r--r-- 1 root root 1013 Jun 30 23:39 server.csr-rw-r--r-- 1 root root 215 Jun 30 23:35 server-csr.json-rw------- 1 root root 1679 Jun 30 23:39 server-key.pem-rw-r--r-- 1 root root 1338 Jun 30 23:39 server.pem[root@localhost etcd]#
2. 安裝etcd
2.1 node1上操作
[root@node1 opt]# wget https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz[root@node1 opt]# tar -zxvf etcd-v3.4.9-linux-amd64.tar.gz[root@node1 opt]# mkdir -p /opt/etcd/{bin,cfg,ssl}[root@node1 opt]# mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/[root@node1 etcd]# scp -r /opt/TLS/etcd/{ca.pem,server-key.pem,server.pem} /opt/etcd/ssl/[root@node1 opt]# vim /opt/etcd/cfg/etcd.conf#[Member] ETCD_NAME="etcd-1" ETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="https://192.168.24.136:2380"ETCD_LISTEN_CLIENT_URLS="https://192.168.24.136:2379"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.24.136:2380"ETCD_ADVERTISE_CLIENT_URLS="https://192.168.24.136:2379" ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.24.136:2380,etcd-2=https://192.168.24.137:2380,etcd-3=https://192.168.24.138:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"#[Security]ETCD_CERT_FILE="/opt/etcd/ssl/server.pem"ETCD_KEY_FILE="/opt/etcd/ssl/server-key.pem"ETCD_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"ETCD_CLIENT_CERT_AUTH="true"ETCD_PEER_CERT_FILE="/opt/etcd/ssl/server.pem"ETCD_PEER_KEY_FILE="/opt/etcd/ssl/server-key.pem"ETCD_PEER_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"ETCD_PEER_CLIENT_CERT_AUTH="true"[root@node1 opt]# vim /usr/lib/systemd/system/etcd.service[Unit]Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service]Type=notifyEnvironmentFile=/opt/etcd/cfg/etcd.confExecStart=/opt/etcd/bin/etcdRestart=on-failureLimitNOFILE=65536[Install] WantedBy=multi-user.target[root@node1 etcd]# scp -r /opt/etcd root@node2:/opt/[root@node1 etcd]# scp -r /opt/etcd root@node3:/opt/[root@node1 etcd]# scp -r /usr/lib/systemd/system/etcd.service root@node1:/usr/lib/systemd/system/[root@node1 etcd]# scp -r /usr/lib/systemd/system/etcd.service root@node2:/usr/lib/systemd/system/[root@node1 etcd]# systemctl daemon-reload
2.2 node2上操作
[root@node2 ~]# vim /opt/etcd/cfg/etcd.conf#[Member] ETCD_NAME="etcd-2"ETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="https://192.168.24.137:2380"ETCD_LISTEN_CLIENT_URLS="https://192.168.24.137:2379"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.24.137:2380"ETCD_ADVERTISE_CLIENT_URLS="https://192.168.24.137:2379"ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.24.136:2380,etcd-2=https://192.168.24.137:2380,etcd-3=https://192.168.24.138:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"#[Security]ETCD_CERT_FILE="/opt/etcd/ssl/server.pem"ETCD_KEY_FILE="/opt/etcd/ssl/server-key.pem"ETCD_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"ETCD_CLIENT_CERT_AUTH="true"ETCD_PEER_CERT_FILE="/opt/etcd/ssl/server.pem"ETCD_PEER_KEY_FILE="/opt/etcd/ssl/server-key.pem"ETCD_PEER_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"ETCD_PEER_CLIENT_CERT_AUTH="true"[root@node2 etcd]# systemctl daemon-reload
2.3 node3上操作
[root@node3 ~]# vim /opt/etcd/cfg/etcd.conf#[Member] ETCD_NAME="etcd-3" ETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="https://192.168.24.138:2380"ETCD_LISTEN_CLIENT_URLS="https://192.168.24.138:2379"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.24.138:2380"ETCD_ADVERTISE_CLIENT_URLS="https://192.168.24.138:2379" ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.24.136:2380,etcd-2=https://192.168.24.137:2380,etcd-3=https://192.168.24.138:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"#[Security]ETCD_CERT_FILE="/opt/etcd/ssl/server.pem"ETCD_KEY_FILE="/opt/etcd/ssl/server-key.pem"ETCD_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"ETCD_CLIENT_CERT_AUTH="true"ETCD_PEER_CERT_FILE="/opt/etcd/ssl/server.pem"ETCD_PEER_KEY_FILE="/opt/etcd/ssl/server-key.pem"ETCD_PEER_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"ETCD_PEER_CLIENT_CERT_AUTH="true"[root@node3 etcd]# systemctl daemon-reload
2.4 分別啟動etcd
[root@node1 etcd]# systemctl start etcd [root@node1 etcd]# systemctl enable etcd# 啟動node1的etcd后需要立即啟動node2、node3上的etcd,否則node1的etcd訪問node2、node3不通,一段時候會報啟動失敗
備注說明
ETCD3.4版本ETCDCTL_API=3 etcdctl 和 etcd --enable-v2=false 成為了默認配置,如要使用v2版本,執行etcdctl時候需要設置ETCDCTL_API環境變量,例如:ETCDCTL_API=2 etcdctlETCD3.4版本會自動讀取環境變量的參數,所以EnvironmentFile文件中有的參數,不需要再次在ExecStart啟動參數中添加,二選一,如同時配置,會觸發以下類似報錯“etcd: conflicting environment variable - - “ETCD_NAME” is shadowed by corresponding command-line flag (either unset environment variable or disable flag)”flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API
/opt/etcd/cfg/etcd.conf 配置文件參數說明:
參數含義
ETCD_NAME節點名稱,集群中唯一
ETCD_DATA_DIR數據目錄
ETCD_LISTEN_PEER_URLS集群通信監聽地址
ETCD_LISTEN_CLIENT_URLS客戶端訪問監聽地址
ETCD_INITIAL_ADVERTISE_PEER_URLS集群通告地址
ETCD_ADVERTISE_CLIENT_URLS客戶端通告地址
ETCD_INITIAL_CLUSTER集群節點地址
ETCD_INITIAL_CLUSTER_TOKEN集群 Token
ETCD_INITIAL_CLUSTER_STATE加入集群的當前狀態,new 是新集群,existing 表示加入
三、安裝docker
node1節點
[root@node1 opt]# wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz[root@node1 opt]# mv docker /usr/local/[root@node1 opt]# vim /usr/lib/systemd/system/docker.service[Unit]Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target[Service] Type=notify ExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s[Install] WantedBy=multi-user.target[root@node1 opt]# systemctl daemon-reload[root@node1 opt]# systemctl start docker[root@node1 opt]# systemctl enable docker[root@node1 opt]# scp -r docker/* root@node2:/usr/bin/[root@node1 opt]# scp -r docker/* root@node3:/usr/bin/[root@node1 opt]# scp -r /usr/lib/systemd/system/docker.service root@node2:/usr/lib/systemd/system/ [root@node1 opt]# scp -r /usr/lib/systemd/system/docker.service root@node3:/usr/lib/systemd/system/
node2節點
[root@node2 opt]# systemctl daemon-reload && systemctl start docker && systemctl enable docker
node3節點
[root@node2 opt]# systemctl daemon-reload && systemctl start docker && systemctl enable docker
四、部署api-server(Master Node)
1.創建apiserver自簽證書
[root@node1 k8s]# vim /opt/TLS/k8s/ca-config.json{"signing": {"default": {"expiry": "87600h"},"profiles": {"kubernetes": {"expiry": "87600h","usages": ["signing","key encipherment","server auth","client auth"]}}}}[root@node1 k8s]# vim /opt/TLS/k8s/ca-csr.json{"CN": "kubernetes","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Beijing","ST": "Beijing","O": "k8s","OU": "System"}]}[root@node1 k8s]# vim /opt/TLS/k8s/server-csr.json{"CN": "kubernetes","hosts": ["10.0.0.1","127.0.0.1","kubernetes","kubernetes.default","kubernetes.default.svc","kubernetes.default.svc.cluster","kubernetes.default.svc.cluster.local","192.168.24.136","192.168.24.137","192.168.24.138"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing","O": "k8s","OU": "System"}]}# 生成證書文件[root@node1 k8s]# /usr/local/cfssl/cfssl gencert -initca ca-csr.json | /usr/local/cfssl/cfssljson -bare ca -2021/07/03 17:50:47 [INFO] generating a new CA key and certificate from CSR2021/07/03 17:50:47 [INFO] generate received request2021/07/03 17:50:47 [INFO] received CSR2021/07/03 17:50:47 [INFO] generating key: rsa-20482021/07/03 17:50:47 [INFO] encoded CSR2021/07/03 17:50:47 [INFO] signed certificate with serial number 112636923636866601548066763582581017478124700260[root@node1 k8s]# #使用自簽 CA 簽發 kube-apiserver HTTPS 證書[root@node1 k8s]# /usr/local/cfssl/cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | /usr/local/cfssl/cfssljson -bare server2021/07/03 17:53:04 [INFO] generate received request2021/07/03 17:53:04 [INFO] received CSR2021/07/03 17:53:04 [INFO] generating key: rsa-20482021/07/03 17:53:05 [INFO] encoded CSR2021/07/03 17:53:05 [INFO] signed certificate with serial number 600727103085109645844076084532530568963684939512021/07/03 17:53:05 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable forwebsites. For more information see the Baseline Requirements for the Issuance and Managementof Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);specifically, section 10.2.3 ("Information Requirements").[root@node1 k8s]# ls server*.pemserver-key.pem server.pem[root@node1 k8s]#
2.下載安裝包
[root@node1 opt]# wget https://dl.k8s.io/v1.19.0/kubernetes-server-linux-amd64.tar.gz[root@node1 opt]# tar -zxvf kubernetes-server-linux-amd64.tar.gz[root@node1 opt]# mv kubernetes kubernetes_package[root@node1 opt]# mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}[root@node1 opt]# cp kubernetes_package/kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin/[root@node1 opt]# ll /opt/kubernetes/bin/total 300412-rwxr-xr-x 1 root root 115245056 Jul 3 18:13 kube-apiserver-rwxr-xr-x 1 root root 107249664 Jul 3 18:13 kube-controller-manager-rwxr-xr-x 1 root root 43003904 Jul 3 18:15 kubectl-rwxr-xr-x 1 root root 42123264 Jul 3 18:13 kube-scheduler[root@node1 opt]# ln -s /opt/kubernetes/bin/kubectl /usr/bin/kubectl[root@node1 opt]# [root@node1 opt]# cp /opt/TLS/k8s/{ca-key.pem,ca.pem,server-key.pem,server.pem} /opt/kubernetes/ssl/[root@node1 opt]# ll /opt/kubernetes/ssl/total 16-rw------- 1 root root 1679 Jul 3 18:20 ca-key.pem-rw-r--r-- 1 root root 1359 Jul 3 18:20 ca.pem-rw------- 1 root root 1679 Jul 3 18:20 server-key.pem-rw-r--r-- 1 root root 1627 Jul 3 18:20 server.pem[root@node1 opt]#
3.配置api-server配置文件
[root@node1 opt]# vim /opt/kubernetes/cfg/kube-apiserver.confKUBE_APISERVER_OPTS="--logtostderr=false \--v=2 \--log-dir=/opt/kubernetes/logs \--etcd-servers=https://192.168.24.136:2379,https://192.168.24.137:2379,https://192.168.24.138:2379 \--bind-address=192.168.24.136 \--secure-port=6443 \--advertise-address=192.168.24.136 \--allow-privileged=true \--service-cluster-ip-range=10.0.0.0/24 \--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \--authorization-mode=RBAC,Node \--enable-bootstrap-token-auth=true \--token-auth-file=/opt/kubernetes/cfg/token.csv \--service-node-port-range=30000-32767 \--kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \--tls-cert-file=/opt/kubernetes/ssl/server.pem \--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \--client-ca-file=/opt/kubernetes/ssl/ca.pem \--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \--etcd-cafile=/opt/etcd/ssl/ca.pem \--etcd-certfile=/opt/etcd/ssl/server.pem \--etcd-keyfile=/opt/etcd/ssl/server-key.pem \--audit-log-maxage=30 \--audit-log-maxbackup=3 \--audit-log-maxsize=100 \--audit-log-path=/opt/kubernetes/logs/k8s-audit.log
參數參數解釋
–logtostderr啟用日志
–v日志等級
–log-dir日志目錄
–etcd-serversetcd 集群地址
–bind-address監聽地址
–secure-porthttps 安全端口
–advertise-address集群通告地址
–allow-privileged啟用授權
–service-cluster-ip-rangeService 虛擬 IP 地址段
–enable-admission-plugins準入控制模塊
–authorization-mode認證授權,啟用 RBAC 授權和節點自管理
–enable-bootstrap-token-auth啟用 TLS bootstrap 機制
–token-auth-filebootstrap token 文件
–service-node-port-rangeService nodeport 類型默認分配端口范圍
–kubelet-client-xxxapiserver 訪問 kubelet 客戶端證書
–tls-xxx-fileapiserver https 證書
–etcd-xxxfile連接 Etcd 集群證書
–audit-log-xxx審計日志
啟用 TLS Bootstrapping TLS Bootstrapping機制 TLS Bootstraping:Master apiserver 啟用 TLS 認證后,Node 節點 kubelet 和 kube- proxy 要與 kube-apiserver 進行通信,必須使用 CA 簽發的有效證書才可以,當 Node 節點很多時,這種客戶端證書頒發需要大量工作,同樣也會增加集群擴展復雜度。為了 簡化流程,Kubernetes 引入了 TLS bootstraping 機制來自動頒發客戶端證書,kubelet 會以一個低權限用戶自動向 apiserver 申請證書,kubelet 的證書由 apiserver 動態簽署。 所以強烈建議在 Node 上使用這種方式,目前主要用于 kubelet,kube-proxy 還是由我 們統一頒發一個證書。
4.創建token文件
格式:token,用戶名,UID,用戶組
[root@node1 ~]# head -c 16 /dev/urandom | od -An -t x | tr -d " "ef80e12f86c4e342f449e64e3f94f3a9[root@node1 opt]# vim /opt/kubernetes/cfg/token.csvc47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node- bootstrapper"
5.systemd 管理 apiserver
[root@node1 opt]# vim /usr/lib/systemd/system/kube-apiserver.service[Unit]Description=Kubernetes API Server Documentation=https://github.com/kubernetes/kubernetes [Service]EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.confExecStart=/opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS Restart=on-failure[Install]WantedBy=multi-user.target[root@node1 opt]#
6.啟動并設置開機啟動
[root@node1 opt]# systemctl daemon-reload[root@node1 opt]# systemctl start kube-apiserver[root@node1 opt]# systemctl enable kube-apiserver
7.授權 kubelet-bootstrap 用戶允許請求證書
[root@node1 opt]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
五、部署kube-controller-manager(Master Node)
1. 創建配置文件
[root@node1 opt]# vim /opt/kubernetes/cfg/kube-controller-manager.confKUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \--v=2 \--log-dir=/opt/kubernetes/logs \--leader-elect=true \--master=127.0.0.1:8080 \--bind-address=127.0.0.1 \--allocate-node-cidrs=true \--cluster-cidr=10.244.0.0/16 \--service-cluster-ip-range=10.0.0.0/24 \--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \--root-ca-file=/opt/kubernetes/ssl/ca.pem \--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \--experimental-cluster-signing-duration=87600h0m0s"
2. systemd 管理 controller-manager
[root@node1 opt]# vim /usr/lib/systemd/system/kube-controller-manager.service[Unit]Description=Kubernetes Controller ManagerDocumentation=https://github.com/kubernetes/kubernetes[Service]EnvironmentFile=/opt/kubernetes/cfg/kube-controller-manager.conf ExecStart=/opt/kubernetes/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTSRestart=on-failure[Install]WantedBy=multi-user.target
3. 啟動并設置開機啟動
[root@node1 opt]# systemctl daemon-reload [root@node1 opt]# systemctl start kube-controller-manager [root@node1 opt]# systemctl enable kube-controller-manager
六、部署 kube-scheduler(Master Node)
1. 創建配置文件
[root@node1 opt]# vim /opt/kubernetes/cfg/kube-scheduler.conf
2. systemd 管理 kube-scheduler
[root@node1 opt]# vim /usr/lib/systemd/system/kube-scheduler.service[Unit]Description=Kubernetes SchedulerDocumentation=https://github.com/kubernetes/kubernetes[Service]EnvironmentFile=/opt/kubernetes/cfg/kube-scheduler.confExecStart=/opt/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_OPTSRestart=on-failure[Install]WantedBy=multi-user.target
3. 啟動并設置開機啟動
[root@node1 opt]# systemctl daemon-reload[root@node1 opt]# systemctl status kube-scheduler[root@node1 opt]# systemctl enable kube-scheduler
七、查看集群狀態
[root@node1 opt]# kubectl get csWarning: v1 ComponentStatus is deprecated in v1.19+NAME STATUS MESSAGE ERRORcontroller-manager Healthy ok scheduler Healthy ok etcd-1 Healthy {"health":"true"} etcd-0 Healthy {"health":"true"} etcd-2 Healthy {"health":"true"} [root@node1 opt]#
八、部署 kubelet(Worker Node)
1. 創建kubelet.conf配置文件
[root@node2 ~]# mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}[root@node2 ~]# vim /opt/kubernetes/cfg/kubelet.confKUBELET_OPTS="--logtostderr=false \--v=2 \--log-dir=/opt/kubernetes/logs \--hostname-override=node2 \--network-plugin=cni \--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \--bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \--config=/opt/kubernetes/cfg/kubelet-config.yml \--cert-dir=/opt/kubernetes/ssl \--pod-infra-container-image=lizhenliang/pause-amd64:3.0"
2.配置kubelet-config.yml參數文件
[root@node2 ~]# vim /opt/kubernetes/cfg/kubelet-config.ymlkind: KubeletConfigurationapiVersion: kubelet.config.k8s.io/v1beta1address: 0.0.0.0port: 10250readOnlyPort: 10255cgroupDriver: cgroupfsclusterDNS:- 10.0.0.2clusterDomain: cluster.localfailSwapOn: falseauthentication:anonymous:enabled: false webhook: cacheTTL: 2m0s enabled: true x509: clientCAFile: /opt/kubernetes/ssl/ca.pem authorization: mode: Webhook webhook: cacheAuthorizedTTL: 5m0scacheUnauthorizedTTL: 30s evictionHard: imagefs.available: 15% memory.available: 100Minodefs.available: 10% nodefs.inodesFree: 5%maxOpenFiles: 1000000maxPods: 110
3.生成bootstrap.kubeconfig 配置文件
[root@node1 ~]# scp -r /opt/kubernetes_package/kubernetes/server/bin/{kubectl,kubelet,kube-proxy} root@node2:/opt/kubernetes/bin/[root@node1 ~]# scp -r /opt/kubernetes/ssl/ca.pem root@node2:/opt/kubernetes/ssl/ [root@node2 ]# cd /opt/kubernetes/cfg [root@node2 cfg]# export KUBE_APISERVER="https://192.168.24.136:6443" 145 [root@node2 cfg]# export PORT TOKEN="c47ffb939f5ca36231d9e3121a252940"[root@node2 cfg]# /opt/kubernetes/bin/kubectl config set-cluster kubernetes \--certificate-authority=/opt/kubernetes/ssl/ca.pem \--embed-certs=true \--server=${KUBE_APISERVER} \--kubeconfig=bootstrap.kubeconfig[root@node2 cfg]# /opt/kubernetes/bin/kubectl config set-credentials "kubelet-bootstrap" \--token=${TOKEN} \--kubeconfig=bootstrap.kubeconfig [root@node2 cfg]# [root@node2 cfg]# /opt/kubernetes/bin/kubectl config set-context default \--cluster=kubernetes \--user="kubelet-bootstrap" \--kubeconfig=bootstrap.kubeconfig[root@node2 cfg]# /opt/kubernetes/bin/kubectl config use-context default --kubeconfig=bootstrap.kubeconfig[root@node2 cfg]# cat bootstrap.kubeconfig apiVersion: v1clusters:- cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2akNDQXFhZ0F3SUJBZ0lVRTdyUWVKS2wrNGdxOXNPMzQvclBKdDRpZ21Rd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFXcHBibWN4RURBT0JnTlZCQWNUQjBKbAphV3BwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1CNFhEVEl4TURjd016QTVORFl3TUZvWERUSTJNRGN3TWpBNU5EWXdNRm93WlRFTE1Ba0cKQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFXcHBibWN4RURBT0JnTlZCQWNUQjBKbGFXcHBibWN4RERBSwpCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByZFdKbGNtNWxkR1Z6Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcXdQcXFUM0RTZE1odVlGQUExVngKSFpkU1NBQ0pRVkN3Mmdvb2JHM0dTaGh3bmY3dzc2MDF0eE5NbUsraEpGNVRBWUNnS05PU2svQ3lUT0wwY0NuNgprcmQ3TEVwNkVzZzl6cXQzN2VaRzExN0MzRXZhR25lZmY0NHUyM2xJSUJQUEJMam84c2Myd2d4SFI4bGREbWlECng0bWhyY3VoVzBHdjluUllUbDdFR2Z0OHlFRFh4SXdFNDFhejgxR0dHN29jd0tZK3BoaUx4TjVkbWZEWFpCWU8KQmdmdEtBOHBjNU9QVVlrUHhXOUcyQStNdkhnTlhBa0xha2lrc0h1MGkxZUxobWQyRUhDeEttbVJLWW1ZUkYxYwpRcy9yd0ZQS1ZHRUpRUyt1NkVDbHZvTGpqZ1VPcE41Ty9aYWxIdjA0aUdkTGd5a2x3ZjJ3RlRqY1BwalYxSFJXCnBRSURBUUFCbzJZd1pEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWQKQmdOVkhRNEVGZ1FVdzIzZWN2UzJ6VVNrY0pSOEtPcG83eVRZaytzd0h3WURWUjBqQkJnd0ZvQVV3MjNlY3ZTMgp6VVNrY0pSOEtPcG83eVRZaytzd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIUzE0ZVB5dGJ2VHZMc0E0Z3d3CmZqR09MeElRNi9iQ2hESml1Q3RxUG5XNld0VC9NdHBqbVFKN0xlMlFFejVMMitLbERsSmdWcE9HWFdqSkY2NHoKZUFDTHhyYlM0TEhhVFZZdnBHM3V0by8rdVNQRkYwTlU3QUdGZnBOVEtMK0I0TTdidUVuYUFBSnpKQnNYSXhqeQowdDdPeEljUWNlN05IRTNTUkhlaHVPbkw1Ymk0K09KbkpwaVYzK1I4ZUsvU3g3ZTRrRXFLdG9mYmY3M0dhbE9vClQzZEh3TzVkeFNkT1B4SzFCbUtHb2pZUEdtUTNrSnM2Nmw0ZmxFZGpKV2prSDd3MWdXcTZHaGx1ZXRFVFlUTzIKQzRlUVpJSTJjZnRRTkh6Q2hJcHM1cXVoNGxackYzaStITHJpbjlxR3Y2N0YwREtwRlAwMXgzVkFTUkwxK2xHcgpobUE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K server: https://192.168.24.136:6443 name: kubernetescontexts:- context: cluster: kubernetes user: kubelet-bootstrap name: defaultcurrent-context: ""kind: Configpreferences: {}users:- name: kubelet-bootstrap user: token: c47ffb939f5ca36231d9e3121a252940[root@node2 cfg]#
4. systemd 管理 kubelet
[root@node2 cfg]# vim /usr/lib/systemd/system/kubelet.service[Unit]Description=Kubernetes KubeletAfter=docker.service[Service]EnvironmentFile=/opt/kubernetes/cfg/kubelet.confExecStart=/opt/kubernetes/bin/kubelet $KUBELET_OPTSRestart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.target
5. 啟動并設置開機啟動
[root@node2 cfg]# systemctl daemon-reload[root@node2 cfg]# systemctl start kubelet[root@node2 cfg]# systemctl enable kubelet
6.批準 kubelet 證書申請并加入集群
[root@node1 cfg]# kubectl get csr[root@node1 cfg]# kubectl certificate approve node-csr-i-zpjwJ6gET9K_AN0-M8Wb7XpZxrqyBcNlUKGZLv35s[root@node1 cfg]# kubectl get nodeNAME STATUS ROLES AGE VERSIONnode2 NotReady80s v1.19.0[root@node1 cfg]# 注:由于網絡插件還沒有部署,節點會沒有準備就緒 NotReady
九、部署 kube-proxy
1.創建kube-proxy.conf
[root@node2 cfg]# vim /opt/kubernetes/cfg/kube-proxy.confKUBE_PROXY_OPTS="--logtostderr=false \--v=2 \--log-dir=/opt/kubernetes/logs \--config=/opt/kubernetes/cfg/kube-proxy-config.yml"
2.配置參數文件
[root@node2 cfg]# vim /opt/kubernetes/cfg/kube-proxy-config.ymlkind: KubeProxyConfigurationapiVersion: kubeproxy.config.k8s.io/v1alpha1bindAddress: 0.0.0.0metricsBindAddress: 0.0.0.0:10249clientConnection: kubeconfig: /opt/kubernetes/cfg/kube-proxy.kubeconfighostnameOverride: node2clusterCIDR: 10.0.0.0/24
3.生成 kube-proxy.kubeconfig
# master節點上生成[root@node1 k8s]# cd /opt/TLS/k8s[root@node1 k8s]# vim kube-proxy-csr.json {"CN": "system:kube-proxy","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing","O": "k8s","OU": "System"}]}[root@node1 k8s]# /usr/local/cfssl/cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | /usr/local/cfssl/cfssljson -bare kube-proxy[root@node1 k8s]# scp -r {kube-proxy-key.pem,kube-proxy.pem} root@node2:/opt/kubernetes/ssl/
4.生成kubeconfig
[root@node2 cfg]# export KUBE_APISERVER="https://192.168.24.136:6443"[root@node2 cfg]# /opt/kubernetes/bin/kubectl config set-cluster kubernetes \--certificate-authority=/opt/kubernetes/ssl/ca.pem \--embed-certs=true \--server=${KUBE_APISERVER} \--kubeconfig=kube-proxy.kubeconfig [root@node2 cfg]# /opt/kubernetes/bin/kubectl config set-credentials kube-proxy \--client-certificate=/opt/kubernetes/ssl/kube-proxy.pem \--client-key=/opt/kubernetes/ssl/kube-proxy-key.pem \--embed-certs=true \--kubeconfig=kube-proxy.kubeconfig [root@node2 cfg]# /opt/kubernetes/bin/kubectl config set-context default \--cluster=kubernetes \--user=kube-proxy \--kubeconfig=kube-proxy.kubeconfig [root@node2 cfg]# /opt/kubernetes/bin/kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
5. systemd 管理 kube-proxy
[root@node2 cfg]# vim /usr/lib/systemd/system/kube-proxy.service[Unit]Description=Kubernetes ProxyAfter=network.target[Service]EnvironmentFile=/opt/kubernetes/cfg/kube-proxy.confExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTSRestart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.target
6. 啟動并設置開機啟動
[root@node2 cfg]# systemctl daemon-reload[root@node2 cfg]# systemctl start kube-proxy[root@node2 cfg]# systemctl enable kube-proxy
十、部署 CNI 網絡(Master Node)
master下載cni包,解壓后,部署好網絡插件,/opt/cni需要拷貝到其他節點上,其他節點也需要
[root@node1 opt]# wget https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz[root@node1 opt]# tar -zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin/[root@node1 opt]# cd /opt/kubernetes/cfg [root@node1 cfg]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml#默認鏡像地址無法訪問,修改為 docker hub 鏡像倉庫。[root@node1 cfg]# sed -i -r "s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.12.0-amd64#g" kube-flannel.yml[root@node1 cfg]# scp -r /opt/cni root@node2:/opt/[root@node1 cfg]# kubectl apply -f kube-flannel.yml[root@node1 cfg]# kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEkube-flannel-ds-jcp6n 1/1 Running 0 6m22s[root@node1 cfg]# kubectl get nodeNAME STATUS ROLES AGE VERSIONnode2 Ready91m v1.19.0[root@node1 cfg]#
1.授權 apiserver 訪問 kubelet
[root@node1 cfg]# vim apiserver-to-kubelet-rbac.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" labels: kubernetes.io/bootstrapping: rbac-defaults name: system:kube-apiserver-to-kubelet rules: - apiGroups: - "" resources: - nodes/proxy - nodes/stats - nodes/log - nodes/spec - nodes/metrics - pods/log verbs: - "*" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:kube-apiserver namespace: "" roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:kube-apiserver-to-kubelet subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: kubernetes
十一、部署node3節點
1. 拷貝已部署好的 Node 相關文件到新節點
[root@node2 opt]# scp -r /opt/kubernetes root@node3:/opt/[root@node2 opt]# scp -r /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@node3:/usr/lib/systemd/system/
2. 刪除 kubelet 證書和 kubeconfig 文件
[root@node3 cfg]# rm -rf /opt/kubernetes/cfg/kubelet.kubeconfig /opt/kubernetes/ssl/kubelet*[root@node3 cfg]#
注:這幾個文件是證書申請審批后自動生成的,每個 Node 不同,必須刪除重新生成。
3. 修改主機名
[root@node3 cfg]# vim /opt/kubernetes/cfg/kubelet.conf --hostname-override=node3[root@node3 cfg]# vim /opt/kubernetes/cfg/kube-proxy-config.yml hostnameOverride: node3[root@node3 cfg]#
4. 啟動并設置開機啟動
[root@node3 cfg]# systemctl daemon-reload[root@node3 cfg]# systemctl start kubelet[root@node3 cfg]# systemctl enable kubelet[root@node3 cfg]# systemctl start kube-proxy[root@node3 cfg]# systemctl enable kube-proxy
5. 在 Master 上批準新 Node kubelet 證書申請
[root@node1 cfg]# kubectl certificate approve node-csr-V5KygJs8u7OWvFB2QI2FyiqdLJNwVpDyHnBhVmrC4oQcertificatesigningrequest.certificates.k8s.io/node-csr-V5KygJs8u7OWvFB2QI2FyiqdLJNwVpDyHnBhVmrC4oQ approved
十二、驗證測試
[root@node1 logs]# kubectl create deployment nginx --image=nginxdeployment.apps/nginx created[root@node1 logs]# kubectl expose deployment nginx --port=80 --type=NodePortservice/nginx exposed
總結說明
1.kubectl get node 不是Ready狀態
我這里的問題是,/opt/cni/ 插件從節點機器上沒有部署
標簽:
相關推薦:
精彩放送:
- []環球觀天下!悟空保是什么保險如何退保
- []過戶車保險費為什么這么貴,原因有以下三點
- []當前熱點-公允價值計量的交易性金融資產_公允價值計量
- []動態:思科瑞2022年凈利9742.6萬同比增長0.38% 總經理馬衛東薪酬100萬
- []民和股份:公司種雞減值確認后不轉回,待種雞淘汰時轉銷對應的減值金額
- []焦點熱門:GQY視訊:公司將在提升內部管理促進工作效能提升的同時,更積極主動應對市場機會
- []快來,在這條“櫻花大道”邂逅春日浪漫!
- []環球速訊:氣墊鞋跑步好嗎(氣墊鞋跑步好)
- []msci中國指數是什么意思
- []消息!公司一上市就發財了嗎
- []世界熱點!中國a股總市值
- []路程除以耗油量等于什么
- []當前焦點!重慶證券公司怎么樣啊
- []【時快訊】究極綠寶石叉字蝠怎么進化?雙腿變翅膀,論叉字蝠神奇的演化路線
- []世界熱議:保利發展前三月銷售1141.3億?月內57億新增四宗地塊
- []觀天下!公司名稱翻譯成英文怎么寫_公司名稱翻譯成英文
- []6折人才房將成歷史?深圳明確:取消安居房和人才房!
- []觀焦點:迎大運動起來 全國勞模與成都職工代表樂動全城
- []當前報道:動態市盈率是什么
- []焦點短訊!gloryhole是什么
- []當前視訊!同花順模擬炒股輸光了需要投資者返還資金嗎
- []熱點聚焦:股市開盤是什么意思
- []世界最資訊丨福布斯發布2023全球億萬富豪榜;海底撈高層指考核方式升級;愛馬仕計劃加速擴張中國市場;淘寶APP首頁測試新增99特賣頻道
- []環球最資訊丨股市怎么樣才能賺錢
- []焦點短訊!常青科技:募資加碼研發創新,推動核心技術自主可控
- []星期六股票代碼是多少
- []當前焦點!金價還會跌嗎
- []【環球速看料】電子體溫計測量哪個部位最準確
- []世界新消息丨中鐵隧道股份有限公司是國企還是央企
- []科創50有哪些股票
- []鱷魚有舌頭嗎(鱷魚的舌頭可以防止水倒灌嗎)
- []當前觀察:每日凈值是什么意思
- []當前看點!債權投資減值準備能夠轉回嗎
- []天天滾動:政府為什么不強制賈躍亭回國
- []當前聚焦:福州期貨開戶哪家公司比較好
- []視焦點訊!汗斑怎么治療徹底根除_汗斑的最佳治療方法
- []焦點日報:一季度國家鐵路客貨運輸兩旺
- []滾動:剛買了三者沒買不計免賠怎么辦
- []實時:公積金提前還款
- []醫保比例單位和個人怎么計算
- []當前頭條:房屋結構安全鑒定報告_房屋結構
- []環球熱門:共創儲能新時代|比亞迪儲能榮膺第十一屆儲能國際峰會暨展覽會ESIE2023多項大獎
- []權威發布:科華數能用戶側儲能系統出貨量TOP1
- []世界熱議:“風起水涌,能量聚攏”| 科陸重磅發布Aqua、Aero、Byzer儲能新品
- []特變電工新能源攜光儲新品亮相儲能國際峰會
- []環球焦點!聚焦ESIE2023 | 興儲世紀與行業一起邁步新征程
- []每日熱訊!蜂巢能源疊片短刀L500型325Ah儲能專用電芯首次亮相儲能國際峰會
- []教人開網店的騙局_網上教開網店是真是假
- []【天天聚看點】瑞源電氣與您相約第十一屆儲能國際峰會,我們在6號館(S86)等您!
- []全球焦點!1八成干的香腸冷凍能放多久?
- []今日熱議:房子,竟然成了萬惡之源
- []天天簡訊:透露大模型進展以及英偉達合作情況,AI操作系統龍頭亮了!這些高增長低估值股熱度爆棚
- []快資訊:鑫鉑股份:修訂后的考核指標2應是增長至的概念,公司已就上述筆誤進行了更正,詳見巨潮資訊網
- []招商銀行信用卡咖啡風暴10元來襲!
- []尉氏附近有好玩的地方嗎 尉氏有什么好玩兒的嗎 尉氏附近有好玩的地方嗎在哪
- []空客在華獲160架新飛機訂單;新東方將布局文旅產業 | 大公司簡報
- []天天新消息丨特銳德:有一定的出口外銷,但對公司充電業務總收入的影響不大
- []全民推方塊好玩嗎 全民推方塊玩法簡介
- []世界信息:qdll基金是什么意思
- []股票分紅分的是不是自己的錢
- []新股申購可以撤單嗎
- []當前滾動:趙薇娛樂公司叫什么
- []做空為什么跌了還賺錢
- []【世界快播報】中國在臺海軍演可不是“炸魚”,而是炸臺獨的心和膽,矯正美臺對臺海形勢的預期
- []天天時訊:僅租金收入就高達百億 新城控股連續五年經營性現金流凈流入
- []視訊!企業為什么選擇在科創板上市
- []【全球新要聞】TE Connectivity @2023年儲能國際峰會暨展覽會
- []長城是由誰建造的
- []【環球報資訊】創業板指數基金有哪些
- []跨國公司有哪些
- []今日熱訊:工銀價值是什么基金
- []保障額度是什么意思,保險金額
- []環球關注:被車撞了怎么跟保險公司溝通賠償,有以下四步
- []當前資訊!社保買兩年不買可退回錢嗎,滿足條件可以退
- []環球短訊!新能源汽車自燃保險公司賠付嗎,購買了自燃險會賠付
- []私企有公積金嗎,有
- []【環球時快訊】直擊現場!沃太能源亮相北京ESIE展,"新一代"能源技術備受矚目!
- []環球新消息丨a股和美股哪個適合散戶
- []每日短訊:深化儲能業務布局 首航攜光儲系統解決方案亮相ESIE2023
- []【獨家】杠桿效應是什么
- []注冊制有什么特點
- []風投基金是什么意思
- []“數”說數字政府建設“山東樣本”
- []今日熱議:ipo啥意思
- []創業板和科創板的區別
- []震蕩股票怎么操作
- []環球播報:龍騰光電榮膺電博會金獎,卓越技術引領行業
- []前沿熱點:股市大跌的原因
- []天天快消息!權重股是指哪些股票
- []權重股什么意思
- []觀點:交通運輸部部署開展2023年中國航海日活動
- []世界滾動:“豫”見恐龍骨架化石數字作品限量發行
- []騰訊視頻與抖音達成合作,推動長短視頻融合發展
- []每日信息:3600億巨頭出手!聯手兩大新能源公司,要干這件大事
- []【全球速看料】這群HUSTer,在山溝溝里種出“金坨坨”!
- []焦點短訊!買瓶洗發水送女票
- []國潮吸引創業者
- []每日報道:李國慶羨慕周鴻祎平和離婚背后,與俞渝離婚大戰雞飛狗跳
- []陽光車險為啥便宜,陽光車險的理賠流程有哪些
- []配置占比大幅提升 機構頻頻現身科創板股
- 世界熱頭條丨K8s安裝部署怎么操作?K8S集群安裝部署及操作說明
- 全球新資訊:合肥今起恢復公積金異地貸款
- 【世界播資訊】鄭州公布2023年680個市重點建設項目名單 總投資1.08萬億元
- 今日熱搜:深圳羅湖區發放5000萬購車補貼 個人最高獲10萬元補貼
- 環球快看點丨TD早報 | 錦江與雅高簽署諒解備忘錄;廣州會展業回暖激活商旅市場
- 環球視訊!2021年養老金計算公式 2021養老金計算公式是怎樣的
- 焦點速看:雙預警!通州明后天陣風8級!伴有沙塵!注意防范——
- 社??せ盍耸遣皇墙鹑诠δ芫烷_通了,不一定
- 解局 | 建發一周三城拿地記:“保守觀望”和“規模擴張”
- 公積金可以取幾次,有以下四種情況
- B站注冊資本增幅400%至5億 目前由陳睿全資持股
- 光源資本出任獨家財務顧問 沐曦集成電路10億元A輪融資宣告完成
- 巨輪智能2021年上半年營收11.24億元 期內研發費用投入增長19.05%
- 紅棗期貨尾盤拉升大漲近6% 目前紅棗市場總庫存約30萬噸
- 嘉銀金科發布2021年Q2財報 期內凈利潤達1.27億元同比增長208%
- 成都銀行2021上半年凈利33.89億元 期內實現營收同比增長17.27億元
- 汽車之家發布2021年第二季度業績 期內新能源汽車品牌收入增長238%
- 中信銀行上半年實現凈利潤290.31億元 期末不良貸款余額706.82億元
- 光伏概念掀起漲停潮交易價格創新高 全天成交額達1.29億元
- 上半年生物藥大增45% 關鍵財務指標好轉營收賬款持續下降
- 環球微資訊!股票行情快報:天元股份(003003)4月7日主力資金凈買入55.04萬元
- 中交地產2022年收入385億?較上年增長164.52%
- 天天快報!LG化學金惠子:中國醫美市場潛力巨大,高端市場尤需持續發力
- 天天報道:中交地產2022年凈利潤0.34億元丨年報快訊
- 快訊:蘇寧環球披露前期會計差錯更正 涉及2021年度末未分配利潤數據
- 天天觀熱點:新能源車險保費大增背后:賠付率超油車,行業如何提升利潤?
- 天天新消息丨專訪陸家嘴董事長徐而進:集團優質資產注入 三年內預計預收款項近400億元
- 每日熱訊!3月上海二手房成交套數達20個月新高:掛牌量充足,價格穩定
- 環球觀察:專訪:對中國經濟長期向好充滿信心——訪美敦力全球高級副總裁顧宇韶
- 每日關注!招商蛇口一季度簽約銷售金額722.66億元 同比增長超五成
- 當前快訊:嚴躍進:新力退市、藍光預警,防范房企債務危機演變為股市危機
- 機構評3月非農:美國就業增長雖降溫,但美聯儲5月加息不可避免?
- 云海金屬:青陽項目按計劃是今年投產
- 世界要聞:湖北能源:公司信息披露嚴格按照監管部門相關要求辦理,無應披未披事項
- 全球百事通!運動品牌“雙雄”安踏、李寧“失速”,成長性陷入瓶頸,高端化困難重重
- 國內游熱度走高,全國多地知名景區官宣免票
- 城投控股一季度主要房地產項目新增簽約金額4570萬元
- 金融街預計2023年與控股股東關聯交易不超3.1億
- 當前短訊!鄭州樓市再放大招!公積金最高可貸100萬
- 天天百事通!天健集團按比例支付深圳坪山土地價款?代價4.84億元
- 世界今日報丨魚躍醫療:公司會根據對應產品所處階段、業務推廣的進度,合理安排產能配置
- 天天快看點丨融創房地產等被執行超12億 融創房地產3天被執行69次
- 通裕重工:國有控股后,公司樹立了“打造國際一流的能源裝備制造商及知名的功能材料供應商”的戰略目標
- 世界視訊!歐普康視:公司不是AI類企業,產品中會根據需要吸收采用必要的AI技術
- 世界觀焦點:國任財險副總經理馬昌明任職資格批復
- 民生銀行參展“第十一屆國際儲能峰會”并舉辦“聚力儲能 和合共生”金融論壇
- 財信發展為4家子公司提供181.03萬元擔保
- 全球播報:香江控股2022年營收60.55億元 銷售金額24.41億元
- 頭條焦點:振邦智能:目前微逆產品已完成樣機的測試,目前正在進行型式測試、并網測試等,爭取早日通過認證
- 今日關注:粵海股份:城啟集團等五家企業破產清算案獲得通過
- 中國電影前三月票房119億 《流浪地球2》累計40.26億
- 當前看點!陜天然氣:公司目前正在開展天然氣貿易前期準備工作,積極對接相關方,實質性貿易業務暫未開展
- 天天看點:香江控股:2022年營業收入為60.55億元
- 熱點聚焦:安徽首創“納稅信用綠卡” 將在長三角地區推廣應用
- 告別日燒3億的困局,三大航今年能否實現盈利?
- 財面兒丨合生創展:前3月實現合同銷售額100.67億元 同比增長25.5%
- 合肥百貨:2022年歸母凈利潤下降7.3%
- 焦點熱門:招商蛇口完成發行10億短期融資券 利率2.2%
- 新消息丨中環股份(002129.SZ):2020年度歸母凈利升20.51%至10.89億元 擬10派0.6元
- ST泰禾:太原金尊府項目在屬地政府及相關機構的大力支持和協助下,正在積極推進復工前期的各項工作
- 全球新資訊:鄭州:承租公租房、保租房的家庭公積金提取金額最高可為3.6萬元
- 環球最資訊丨兆威機電:公司積極把握汽車自主品牌和新能源汽車的發展機遇,充電槍鎖驅動系統項目按計劃穩步推進中
- 成渝雙城首屆社會辦醫創新發展大會在渝舉行
- 環球新動態:直擊現場!馬應龍亮相世界大健康博覽會
- 資訊推薦:新加坡旅游業等來了中國游客
- 微速訊:安徽高速地產9.51億元資產支持ABS已獲反饋
- 新消息丨中交地產:成功發行7億元公司債券
- 全球熱文:中國鐵建擬掛牌轉讓3家項目公司股權 涉及四川成都、江蘇淮安等地
- 今頭條!浙江中成房地產4.79億元競得紹興1宗地塊
- 焦點關注:國電南自:市值管理核心是不斷優化上市公司的資產質量和做優經營業績以實現價值提升
- 環球快報:宏盛股份:股市有風險,入市需謹慎
- 京東拍賣春季法拍節開啟 房產5.6折起拍、豪車7折起拍
- 突發!千億黑馬房企退市,此前老板“退出群聊”嚇壞債權人
- 環球視點!南都物業:公司按要求定期披露股東戶數,敬請留意定期報告相關內容
- 雁棲湖健康發展論壇在京召開
- 天天新動態:黃金比例身材是幾幾分
- 觀熱點:基金回報率一般多少
- 天天日報丨房地產板塊漲幅第一!美女私募回應:這個鍋我不背!
- 證券大漲是牛市到了嗎
- 當前簡訊:股息分紅是利好嗎
- 微動態丨上海第一家試行股份制經營的公司是
- 熱點在線丨紹興發布總額6000萬元政府消費券 按“先申領后抽簽”模式進行
- 每日快訊!津惠保是什么保險,普惠型補充醫療險
- 天天百事通!中南置地:2023年第一季度累計交付1.5萬套房屋
- 世界焦點!電子醫??ǖ谝淮卧趺从?,有以下六個步驟
- 北京洛娃大廈二次拍賣流拍 當前價7.67億元
- 焦點資訊:房地產板塊走強 天?;q停
- 焦點信息:綠城水務(601368)4月7日主力資金凈買入178.16萬元
- 【全球播資訊】農村社會養老保險怎么買最劃算,有以下兩點
- 4月7日西子潔能漲停分析:光熱發電,創投,釩電池概念熱股
- 環球今熱點:中國人壽生存金多久拿一次,三年或是一年領取一次
- 訂單險買家退貨怎么賠,賠付的是商品的價格
- 【環球報資訊】4月7日麥格米特漲停分析:呼吸機,智能制造,充電樁概念熱股
- 4月7日首藥控股漲停分析:創新藥,醫藥概念熱股
- 4月7日三維化學漲停分析:光熱發電,異丙醇,石油化工概念熱股
- 環球報道:回落是上升還是下降
- 券商龍頭股票有哪些
- 未成年可以炒股嗎
- 環球微速訊:macd頂背離和底背離是什么
- 世界消息!股份制銀行有哪些
- 鑄儲能品質標桿|晶科能源新一代SunGiga液冷工商業儲能解決方案重磅來襲
- 錢小樂:是“借錢三巨頭”之一,也是小而美的信貸新星
- 世界實時:浙江湖州:2023年將再增1.53萬套保障性租賃住房
- 【世界速看料】天力鋰能:碳酸鋰價格持續下跌,影響到下游采購需求,直接影響到訂單下滑,導致開工率下降
- 焦點快播:專家稱金價創新高只是時間問題,短期須警惕3月就業和通脹報告
- 世界快看:中國金茂一季度簽約增幅40% 產品+服務筑基精益發展底盤
- 萬達地產集團新增兩則被執行人信息,執行標的近10.87億元
- 京東京造正式布局元宇宙 打造"京造元宇宙"虛擬世界
- 天天日報丨京東京造正式布局元宇宙 打造"京造元宇宙"虛擬世界
- A股電影娛樂板塊走強 上海電影漲停、華誼兄弟、博納影業等上揚
- 全球看點:英鎊見頂了?機構反駁:還有200點上漲空間
- 世界熱文:浙農股份:公司在浙江省嘉善縣西塘鎮開展現代糧食產業園建設,打造未來耘農場,目前種植有萬畝水稻
- 快消息!銀行卡里邊定期的錢可以轉活期嗎
- 世界今日訊!諾基亞市值最高峰多少
- 當前動態:微眾銀行有年費嗎
- 仁恒置地首季度合約預售金額約81.29億 同比下降49.9%
- 世界新資訊:中國交建:分拆設計業務打造行業龍頭上市公司平臺
- 每日聚焦:北京海淀區上地西路39號部分土地及房產二次掛牌 起拍價降至6.86億
- 焦點熱議:贛州城投30億元私募債券項目更新為“已反饋”
- 北京:廢止房屋拆遷許可證制度 應采取房屋安置等方式予以補償